В следующем коде, почему адрес, удерживаемый указателем x
, изменяется после delete
? Как я понимаю, вызов delete
должен освобождать выделенную память из кучи, но не должен изменять адрес указателя.
using namespace std;
#include <iostream>
#include <cstdlib>
int main()
{
int* x = new int;
*x = 2;
cout << x << endl << *x << endl ;
delete x;
cout << x << endl;
system("Pause");
return 0;
}
OUTPUT:
01103ED8
2
00008123
Наблюдения: я использую Visual Studio 2013 и Windows 8. Сообщается, что это не работает в других компиляторах. Кроме того, я понимаю, что это плохая практика и что я должен просто переназначить указатель на NULL после его удаления, я просто пытаюсь понять, что ведет к этому странному поведению.