vector::push_back() schreibfehler



  • hi,

    ich habe das problem das ich beim auufruf der push_back() methode einen unbehandelte ausnahme bekomme und mein programm crasht. dies geschieht im debugg modus von vs2005. im release modus gibt die selbe stelle keinen fehler aus. starte ich dann die exe direkt crasht das programm wieder.

    //der konstruktor von point. der trianglevec ist auf jedenfall gültig
    //wird in jedem konstruktur wie hier initialisiert
    Point::Point(void)
    {
    	position = NULL;
    	triangles = new POINTERTRIANGLEVEC();
    }
    
    void Point::addParentTriangle( Triangle &triangle ){
    	triangles->push_back( &triangle );           //hier crasht es...
                                                         //triangle ist ein gültiges
                                                         //objekt, sehe ich im debugger
    }
    
    Point p = new Point();
    Triangle tri = new Triangle();
    .
    .
    .
    p->addParentTriangle( *tri ); //so in etwa sieht es im progg aus
    .
    .
    

    was kenn denn bei einem push_back schief gehen? das merkwürdige ist halt auch das genau dieser code an anderen stellen im progg funktioniert...

    jemand vorschläge oder ideen was ich mal testen könnte?



  • also ich bin der sache etwas auf die schliche gekommen..

    habe in den konstruktoren für die points noch

    triangles->reserve(1);
    

    hinzugefügt.
    das interessante dabei ist. das bei dem aufruf der zu dem crash führt die kapazität mit 0 angezeigt wird. bei allen anderen ist sie 1.

    gibt es irgendeine grenze wieviel vectoren man nutzen kann? oder ka. kann ich irgendwie testen ob noch speicher verfügbar ist für den vector?
    wenn ich dann nämlich in die stl reingucke mit dem debugger taucht irgendwo die speicheradresse 0xabababab auf, welche wohl fehlerhaft laut dem internet ist...

    jemand vorschläge?


  • Mod

    mehr kontext bitte.



  • ha, bei meiner tiefen suche im speicher ist mir was aufgefallen...ich esel hab vergessen den zuweisungsoperator zu überladen...und deswegen klappt das nicht...

    naja, problem selber gelöst 😛



  • In deinem Code da oben ist keine Zuweisung (zumindest keine, für die du überladen müsstest) :p.



  • das stimmt wohl aber der fehler war schon ein paar zeilen vorher, denen ich keine so große beachtung geschenkt hatte...


Anmelden zum Antworten