Książka C ++, którą czytałem, stwierdza, że kiedy wskaźnik jest usuwany za pomocą delete
operatora, pamięć w miejscu, na które wskazuje, jest „zwalniana” i można ją nadpisać. Stwierdza również, że wskaźnik będzie nadal wskazywał tę samą lokalizację, dopóki nie zostanie ponownie przypisany lub ustawiony na NULL
.
Jednak w programie Visual Studio 2012; wydaje się, że tak nie jest!
Przykład:
#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;
}
Kiedy kompiluję i uruchamiam ten program, otrzymuję następujące dane wyjściowe:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Oczywiście adres wskazywany przez wskaźnik zmienia się po wywołaniu funkcji usuwania!
Dlaczego to się dzieje? Czy ma to coś wspólnego z programem Visual Studio?
A jeśli delete może zmienić adres, na który i tak wskazuje, dlaczego nie miałby automatycznie ustawiać wskaźnika na NULL
zamiast jakiegoś losowego adresu?