Книга С++, которую я читал, гласит, что при удалении указателя с помощью оператора delete
память в том месте, где он указывает, "освобождается", и ее можно перезаписать. Он также указывает, что указатель будет продолжать указывать на одно и то же место, пока оно не будет переназначено или не будет установлено на NULL
.
Однако в Visual Studio 2012; это, похоже, не так!
Пример:
#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;
}
Когда я компилирую и запускаю эту программу, я получаю следующий вывод:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
Очевидно, что адрес, указатель которого указывает на изменения при вызове delete!
Почему это происходит? Это как-то связано с Visual Studio?
И если delete может изменить адрес, который он указывает на anyways, почему бы не удалить, автоматически установить указатель на NULL
вместо некоторого случайного адреса?