我认为删除指针指向的内存应该用零覆盖。(不确定) 但它仍然指向 int 值 10 和相同的地址。怎么回事?
int *p = new int;
*p = 10;
cout << *p << endl; //10
cout << p << endl; //0x7fafc3c02e80
delete p;
cout << *p << endl; //10
cout << &(*p) << endl; //0x7fafc3c02e80!
return 0;
最佳答案
删除运算符释放指针指向的内存。一旦释放,它就可以随时重新分配,因此访问该指针将产生不可预知的结果。在您的程序中,情况很简单,内存尚未重新分配给其他任何东西。
https://msdn.microsoft.com/en-us/library/h6227113.aspx
具体来说:
“在对象上使用删除运算符会释放其内存。在删除对象后取消引用指针的程序可能会产生不可预知的结果或崩溃。 当 delete 用于为 C++ 类对象释放内存时,对象的析构函数在对象的内存被释放之前被调用(如果对象有析构函数)。”
关于c++ - 已删除的指针仍然指向旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36284720/