Wie kann sowas sein? (std::vector / new)



  • Hallo!

    Ich habe folgendes problem:

    typedef int MEGUI_ID;
    std::vector<MEGUI_ID> bla;
    g_GUI->GetIDList(bla);
    for(int i=0;i<bla.size(); i++) {
      g_GUI->SendMessage( bla[i], &msg );
    }
    bla.clear();   <- hier tritt eine debug assertion auf
    
    meGUI::GetIDList(std::vector<MEGUI_ID> IDList)
    {
        IDList.clear();
        int numfound=0,i=0;
        std::map<MEGUI_ID, meGUIElement*>::const_iterator f;
        do{
            f = m_IDMap.find(i);
            if(f != m_IDMap.end()) {
                IDList.push_back(i);
                numfound++;
            }
            i++;
        }while(numfound<m_IDMap.size());
        return ME_OK;
    
    }
    

    Woran kann das denn liegen?

    ein ähnliches Problem ist dieses hier:

    class meFont
    {
       meFont() { 	m_Abstand = 3;
    	m_IsInit = false;
    	m_IsUnInit = true;
               }:
       ~meFont() { Shutdown(); };
    
       void Shutdown()
       { 
          if(!m_IsInit || m_IsUnInit)
               return;
         // -.......
        }
    };
    
    meFont* ptr = new meFont;
    delete meFont;    <- hier tritt auch eine debug assertion auf.
    

    Kann mir da jemand helfen? Ich hab echt keinen Plan, woran das liegen könnte...



  • auf den ersten blick würd ich sagen, das der fehler irgendwo im nichtgeposteten code liegt.
    das clear() auf eine leeren Sequenz ist eigentlich unkritisch.



  • Ich hab ja allen Code gepostet, der aufgerufen wird. Ich hab aber vergessen, dass die Funktion GetIDList in einer externen Dll liegt. Vielleicht hat das ja damit was zu tun...
    class meFont liegt auch in einer DLL, new und delete im Hauptprogramm.

    Außerdem hab ich das & vergessen bei GetIDList ... es müsste iegtnlich heißen

    meGUI::GetIDList(std::vector<MEGUI_ID>& IDList)
    {

    }



  • Kann mir keiner helfen?



  • Ich habs immer noch nciht hinbekommen 😞



  • was für ein assert kommt den überhaupt?



  • Hmm also mir ist da was nicht ganz klar

    typedef int MEGUI_ID;
    std::vector<MEGUI_ID> bla;
    g_GUI->GetIDList(bla); //bla ist nach diesem Aufruf imma noch leer !!!! siehe unten
    for(int i=0;i<bla.size(); i++) {
      g_GUI->SendMessage( bla[i], &msg );
    }
    bla.clear();   <- hier tritt eine debug assertion auf
    
    meGUI::GetIDList(std::vector<MEGUI_ID> IDList)
    {
        IDList.clear();
        int numfound=0,i=0;
        std::map<MEGUI_ID, meGUIElement*>::const_iterator f;
        do{
            f = m_IDMap.find(i);
            if(f != m_IDMap.end()) {
                IDList.push_back(i); //wozu machst du das ? Dir ist klar das du keine Referenz hast ???
                numfound++;
            }
            i++;
        }while(numfound<m_IDMap.size());
        return ME_OK;
    

    Siehst du was ich meine ?



  • @prolog
    Schau dir noch mal seinen zweiten Beitrag an.

    In dem geposteten Code sehe ich keinen Fehler. Mir scheint das Problem ist eher im Zusammenhang mit der DLL zu suchen. Solche liegen aber nicht im Bereich von Standard-C++. Da musst du also deine Compilerdoku befragen. Vielleicht kann dir aber auch jemand aus unseren verschiedenen platformspezifischen Foren helfen.



  • Hallo,

    Ui sry, öm ja vergesst das. Hab ich voll überlesen.


Anmelden zum Antworten