Ich kann mich Thoran nur anschließen, ein gelöschter Zeiger gehört auf NULL gesetzt. Allerdings nicht, weil dann delete abstürtzt - tut es auch gar nicht, wenn es richtig implementiert ist, genauso wenig wie free -, aber man bekommt ihn bei falschen Zugriffen um die Ohren geworfen, d.h. das Programm stürtzt ab. Der Grund ist einfach: Wenn das Programm mit einem NULL-Zugriff abstürtzt, kann man das viel einfacher debuggen, als einen Zeiger, der auf eine Speicherstelle zeigt, die evtl. schon wieder im gleichen Programm neu vergeben wurde und der dann groben Unfug anstellt, der aber erst irgendwann später auffällt. (Warum hat sich der Wert geändert?)
Klar wird man sich früher oder später damit beschäftigen müssen. Aber am
Anfang ist es wichtiger, die Programmierer-Denkweise zu lernen. Details
wie Speicherverwaltung lenken da erstmal vom Hauptproblem ab...
Genau das gehört doch dazu. Viele Probleme kann man nur effizient lösen, wenn man sich mit der Speicherverwaltung auskennt.
Warum sollte man eine bereits freigegebene speicherstelle erneut freigeben?
Das kann bei komplexeren Programmen schonmal passieren, wenn eine Fehlerbehandlung direkt aufräumt und beim Beenden wird dann auch nochmal aufgeräumt. Hat man den Zeiger auf NULL gesetzt, ignorieren delete und free die Speicherfreigabe einfach und man kann sich lästiges Buchführen sparen, welche Zeiger noch gültig sind.