delete und delete[]
-
#include <set> #include <iostream> using namespace std; class X; set<X*> setX; set<X*>::iterator pos; class X { public: unsigned getNum() const {return refCount;} X() { inc(); setX.insert(this); cout << "ctor" << " " << refCount << endl; } ~X() { dec(); setX.erase(this); cout << "dtor" << " " << refCount << endl; } private: static unsigned refCount; void inc(){refCount++;} void dec(){refCount--;} }; unsigned X::refCount = 0; int main() { unsigned zahl = 0; X* px = new X[20]; for( pos = setX.begin(); pos != setX.end(); ++pos) { zahl++; cout << zahl << " " << *pos << " " << (*pos)->getNum() << endl; } delete px; // Fehler zahl = 0; for( pos = setX.begin(); pos != setX.end(); ++pos) { zahl++; cout << zahl << " " << *pos << " " << (*pos)->getNum() << endl; } }
-
Abgesehen davon, dass du einem einfach den Code hinknallst und nichts weiter dazu schreibst, der Fehler liegt genau da, wo du ihn bereits durch Kommentar gekennzeichnet hast.
Es muss
delete[] px
heißen, da du ja auch
px = new X[20]
schreibst.
Habe den Code aber nur überflogen, kann sein, dass noch mehr Fehler darin enthalten sind.
Caipi
-
Habe den Code aber nur überflogen, kann sein, dass noch mehr Fehler darin enthalten sind.
-
Wenn man für den unfreundlichsten und unaussagekräftigsten Thread Punkte verteilen könnte, wäre dieser in meine Gunst ganz weit vorne.
-
delete löscht Zeiger auf Objekte
delete[] löscht Zeiger auf Arrays (bzw. gibt den Speicher des Arrays frei)