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

时间:2016-03-29 12:47:08

标签: 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;

3 个答案:

答案 0 :(得分:2)

delete运算符释放指针指向的内存。一旦释放,它可以随时重新分配,因此访问该指针将产生不可预测的结果。在你的程序中,只是存储器还没有被重新分配用于其他任何东西。

https://msdn.microsoft.com/en-us/library/h6227113.aspx

具体做法是:

“在对象上使用delete运算符释放其内存。删除对象后取消引用指针的程序可能会产生不可预测的结果或崩溃。 当删除用于释放C ++类对象的内存时,在释放对象的内存之前调用对象的析构函数(如果对象有析构函数)。“

答案 1 :(得分:1)

您已返回分配给空闲堆池的空间。这并不意味着什么东西会写入零。这需要时间,你可能不想花时间在那个任务上。

我认为某些类型的析构函数可能会在销毁期间清除其存储空间,但int却没有。

如果您确实希望删除数据,请在致电delete

之前自行清除

在告诉系统完成内存后,继续使用内存也是一个坏主意。

因此,您可以选择在NULL之后将指针设置为delete,如果您搞砸了并尝试使用旧指针,这将有助于导致异常。

答案 2 :(得分:0)

您没有删除指针的实际value或其指向的值。你只是释放内存所以其他指针“稍后”将能够指向同一个位置。

相关问题