В книге на C ++, которую я читал, говорится, что когда указатель удаляется с помощью 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....
Очевидно, что адрес, на который указывает указатель, изменяется при вызове удаления!
Почему это происходит? Связано ли это конкретно с Visual Studio?
И если delete в любом случае может изменить адрес, на который он указывает, почему бы delete автоматически не установить указатель NULL
вместо некоторого случайного адреса?