Ein C ++ - Buch, das ich gelesen habe, besagt, dass beim Löschen eines Zeigers mit dem delete
Operator der Speicher an der Stelle, auf die er zeigt, "freigegeben" wird und überschrieben werden kann. Außerdem wird angegeben, dass der Zeiger weiterhin auf dieselbe Position zeigt, bis er neu zugewiesen oder auf gesetzt wird NULL
.
In Visual Studio 2012 jedoch; das scheint nicht der Fall zu sein!
Beispiel:
#include <iostream>
using namespace std;
int main()
{
int* ptr = new int;
cout << "ptr = " << ptr << endl;
delete ptr;
cout << "ptr = " << ptr << endl;
system("pause");
return 0;
}
Wenn ich dieses Programm kompiliere und ausführe, erhalte ich die folgende Ausgabe:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Die Adresse, auf die der Zeiger zeigt, ändert sich eindeutig, wenn delete aufgerufen wird!
Warum passiert dies? Hat dies speziell mit Visual Studio zu tun?
Und wenn Löschen die Adresse ändern kann, auf die es zeigt, warum sollte Löschen dann nicht automatisch den Zeiger auf NULL
anstelle einer zufälligen Adresse setzen?