Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Administrator
Community-Fossil
Zitat
Und auf was für einerSSpeicher steht der Zeiger nachdem man ihn frei gegeben hat?
Ganz ehrlich:Vergiss diesen Ratschlag, denn er ist Quatsch.
Es stimmt zwar, dass es einen Fehler gibt, wenn du denselben Speicher doppelt freigeben willst, aber mit "auf NULL setzen" würde man dieses Fehlverhalten nur verstecken. Wenn sowas passiert, ist mit dem Programm etwas nicht OK, und das sollte behoben werden. Gerade darum ist es gut, wenn es abstürzt.
Es kann, muss aber nicht abstürtzen, das Verhalten ist nicht definiert. Der Standard sagt nicht was passieren soll wenn man einen Speicherbereich zwei mal freigeben will und somit ist es nicht definiert und es kann alles Mögliche passieren.Zitat
OK, danke schon mal für die ganzen Antworten. Aber eines verstehe ich noch nicht, warum stürzt das Programm ab wenn man eine Adresse, die schon freigegeben wurde nochmal freigibt? Und warum sollte man überhaupt eine Adresse, die schon freigegeben ist nochmal versuchen freizugeben?
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »eXpl0it3r« (20.08.2012, 21:22)
Community-Fossil
Wieso erwähnt denn niemand die offensichtlich Lösung?
Wenn man nun aus irgendwelchen Gründen dies nicht tun kann, dann sollte man gelöschte Pointers auf NULL (bzw nullptr) setzten. Es mag vielleicht für das Debuggen praktisch sein, wenn die Applikation einfach crashed wenn man es nicht macht, aber dieses Verhalten ist nicht definiert (undefined behaviour), es mag zwar in den meisten Fällen der Fall sein, dass die Applikation abstürzt, aber dafür gibt es keine Garantie. Auch muss man dann für das Endprodukt überall nachträglich nochmals die NULL Zuweisung einfügen, schliesslich gilt: "Better safe than sorry."
Um hier noch einmal die Lösung zu betonen: Verwende SmartPointers & RAII.
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (21.08.2012, 02:12)
Administrator
Ganz ehrlich:
Werbeanzeige