我读过的一本 C + + 的书上说,当使用 delete
操作符删除一个指针时,它所指向的位置的内存被“释放”,并且可以被覆盖。它还指出,指针将继续指向相同的位置,直到它被重新分配或设置为 NULL
。
但是在 VisualStudio2012中,情况似乎并非如此!
例如:
#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 时,指针指向的地址显然发生了变化!
为什么会发生这种情况? 这是否与 VisualStudio 有关?
如果 delete 可以改变它所指向的地址,那么为什么 delete 不会自动将指针设置为 NULL
而不是随机地址呢?