c++ - 已删除的指针仍然指向旧数据

标签 c++

我认为删除指针指向的内存应该用零覆盖。(不确定) 但它仍然指向 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/

相关文章:

c++ - 使用 C++ 和 Opencv 的注视点/区域

c++ - Boost asio网络分离发送和接收

C++ 套接字无法正常工作

c++ - 在 MPI (C++) 中共享整数数组

C++ 问题

c# - 如何获取静态网络摄像头图像

c++ Floodfill算法在Xcode中崩溃

c++ - C++中的直接构造函数调用

c++ - 使用柯南包管理器 boost 链接错误

c++ - 可能会使花括号过载吗?