Destruktor aufrufen
-
beim durchlaufen einer stl::list moechte ich ein Element aus der Liste entfernen und desen Destruktor aufrufen
//in stl::list figuren_list sind meine objekte //it ist der iterrator if((*it)->life==0){ figuren_list.erase(it); delete &(*it); }beim loeschen kommt ein "Speicherzugriffsfehler"
-
falls in deinem Container ein Zeiegr ist: erst mit new den speicher freigeben, danach den Zeiger aus dem Container raushauen.
delete *it;Falls du ganze Objekte in deiner Liste hast, brauchst du garnichts freigeben, dass macht die Liste dann von allein.
-
if((*it)->life==0){ delete *it; figuren_list.erase(it); }so sieht der code jetzt aus
der fehler ist noch da
-
Erst delete, dann den Zeiger aus der Liste entfernen. erase macht den Iterator ungültig.
-
Erst delete, dann den Zeiger aus der Liste entfernen. erase macht den Iterator ungültig.
Das alleine reicht nicht. Der OP schrrieb ja:
beim durchlaufen einer stl::list
Vor dem Aufurf von list::erase muss er sich also noch einen gültigen Iterator besorgen. Andernfalls führt das nachfolgende Inkrementieren von it zu undefiniertem Verhalten.