Am 17 Nov 2005 um 9:45 hat Frank Lanitz geschrieben:
Am Donnerstag 17 November 2005 09:23 schrieb Johanns Schneider:
Jörg Pauly wrote:
Wenn Du einen Speicherbereich nullen willst, wofür auch immer, musst Du ihn erst NULLen und dann deleten.
Besser andersherum....
Grüsse aus Meissen Jörg
alao wenn ich das jetzt richtig verstanden habe ist es so besser (richtig?):
test *Test = new test(); Test = NULL; delete Test;1
Du versuchst etwa zu löschen, auf das ein NULL-Zeiger weist. Da sich Dein Objekt wahrscheinlich nicht auf 0x0 befindet, na ich weiss nicht....
Sollte das eigentlich nicht mit einem Segfault beantwortet werden? *dumm in die Runde frag*
Nein. Einen Null Pointer kann so oft gelöscht werden wie man will. Es passiert nichts. Denn der delete operator prüft, ob der Zeiger NULL ist. Wenn ja, tut er nichts. Aber um sicher zu sein, dass ein Objekt gelöscht ist, sollte man am besten den Speicherbereich mit einem Bytemuster belegen. Aka delete operator überschreiben. Dann passiert wirklich ein Segfault, wenn ein gelöschtes Objekt verwendet wird. (vtable zeigt auf Adressen mit dem Bytemuster. Bei mir 0xBDBDBDBD) Dies ist in gewisser weise gut um diese Zugriffe auf gelöschte Objekte festzustellen. Test* t = new Test(); t->tuwas("bla"); delete t; t->tunichts("pfui"); Gruß, Lothar
-- Wie man sein Kind nicht nennen sollte: Dick S. Ding
-- Nur wer seinen eigenen Weg geht, kann vom niemandem überholt werden. -- Marlon Brando
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
-- Lothar Behrens | Rapid Prototyping ... Rosmarinstr 3 | 40235 Düsseldorf | www.lollisoft.de