Probleme mit Vector...



  • Hi,

    ich habe:

    std::vector<SObject*> ObjMap;
    std::vector<SObject*>::iterator ObjMap_it;
    

    Eien ObjMap Instanz ahbe ich an einer Stelle und sie ist mit vielen SObject* gefüllt (nennen wir die Instanz w)
    Nun habe ich an einer anderen Stelle einen ObjMap*
    Dieser wird zu Programmbeginn auf w. (nenn wir ihn wp)
    Nun müsste ich ja durch wp-> direkt die Sachen machen, die ich auch mit w. machen kann.
    Klappt aber nicht, ich habe folgenden Code:

    delete (*it);
    wp->erase(it);
    

    it ist ein ObjMap_it, es zeigt auch auf ein richtiges Objekt.
    Die Klasse die sich hinter dem SObject* verbirgt, lösche ich und nachher möchte ich das aus der Klasse löschen.
    Nun aber wird nachdem Löschen der Vector durchsucht:

    for(iterator = w.begin(); iterator != w.end(); ++iterator)
        (*iterator)->action();
    

    Doch (nur nach dem Löschen) an einer Stelle bleibt er stehen und sagt mir unbehandelte Ausnahme.
    Ich schaue mir *iterator an, er lautet: 0xcdcdcdcd oder 0xdfdfdfdf. 😞
    Irgendwo habe ich also einen Denkfehler gemacht.
    iterator ist an der Stelle natürlich auch ein SObjMap_it.

    Weiß jemand, wo ich etwas falsch mache, oder wie ich genauer zu der Probnlmöusng komme?

    Danke im Voraus.

    MfG MAV

    [ Dieser Beitrag wurde am 19.06.2003 um 13:33 Uhr von Mis2com editiert. ]



  • Du brauchst Dir um das, was in dem vector steckt keinen kopf machen. Dafuer ist die STL ja da. wenn du vorher ein delete gemacht hast dann sorgt die vector klasse schon selber dafuer das der speicher fuer den zeiger den du in nem vector speicherst auch wieder freigegeben wird (Achtung: es wird nicht das obj. welches hinter dem zeiger steckt deleted, nur der zeiger selbst, aber das obj. hast Du ja schon zerstoert braucht dir daher um den inhalt von vector keinen kopf machen).

    (kann sein dass ich falsch liege)

    gruss



  • vergiss meinen letzten post.
    ich hab jetzt verstanden was du meinst. habe aber keine ahnung warum das passiert.

    gruss.



  • Ebenb, bei einem vector auf einen Zeiger muss man die Zeiger nämlich selber löschen (wie erstellen).



  • die zeiger liegen doch auf dem stack



  • Kann nicht mal wer antworten, der Ahnung hat? 🙂



  • *push*



  • *push*



  • *hsup*



  • pass auf! stell die Frage vernünftig, dann kriegst du auch ne Antwort! :p



  • Was du schreibst, ist alles korrekt. Der Fehler wird wo anders liegen.



  • Echt? 😞

    Hm, aber ich weiß net wo.
    Beim Durchlaufen nachher meldet er immer nen Fehler.
    Ich habe es jetzt so gemacht, dass ich die Teile garnet erase sondern einfach nru delete und dann den *it = 0 setze.
    Später beim Durchlaufen durch Iterator prüfe ich dann ob das Teil = 0 ist, ist ja auch alles schön und gut, aber leider ist der zeiger (auch wenn er 0 ist) dann noch im vektor drin, naja, muss ich mich mit abfinden. ^^

    Mfg MAV



  • Lag auch woanders, ich hatte in besagter Schleife immer nur einen Aufruf einer Funktion.
    Naja, das Element war das allerletzte von der Schleife und dann hat es ein anderes Element gelöscht und prompt saß der iterator überm Ende hinaus, also konnte map != end() nicht greifen.
    Und er versuchte da auszulesen wo es nichts gab.

    MfG MAV 🙂


Anmelden zum Antworten