delete -> assertion failure
-
wenn ich ein Objekt als Zeiger instanziere:
IrgendeineKlasse* instanz = new IrgendeineKlasse();kann ich doch den reservierten Speicher wieder mit
delete instanz;freigeben
Wenn ich des aber wie folgt mache, bekomme ich ein "Assertion failure" von Visual Studio gemeldet wenn ich die Instanz wieder zerstören möchte. Kann man da "delete" nicht anweden oder warum klappt das nicht?
IrgendeineKlasse instanz; delete &instanz;
-
Hallo
warum sollte man im zweitem Fall ein delete machen müßen? Dort ist instanz ein Stack-Objekt und wird automatisch gelöscht wenn der Scope verlassen wird. Das du aber den Compiler zwingst trotzdem zu löschen bringt die Speicherverwaltung durcheinander, den Erfolg siehst du an deiner Fehlermeldung.
Merke : Zu einem new gehört immer ein delete. Wo kein new da ist auch kein delete (Ausnahmen bestätigen die Regel)bis bald
akari
-
ok, danke
-
ich habe das gleiche problem. bekomme auch eine Fehlermeldung wenn ich das programm ausführe und delete machen will.
Danke!
mfg,
shedint main( int argc, char* argv[] ) { int len= 0; changeValue(&len); delete len; } void changeValue(int* len) { len[0] = 7; }
-
Hat sich erledigt danke! Ich brauch da ja gar kein delete

-
shed schrieb:
int main( int argc, char* argv[] ) { int len= 0; changeValue(&len); delete len; } void changeValue(int* len) { len[0] = 7; }wie kommst du auf len[0] = 7; ?
Sicher funktioniert es aber es impliziert doch das len ein Array ist.Nimm doch *len = 7;