删除PTR C 后会发生什么

What happens after you delete a ptr C++

本文关键字:什么 PTR 删除      更新时间:2023-10-16

我尝试使用以下代码示例删除PTR:

int* data = new int(1);
int* p = NULL; 
p = data;
*p = 3;
delete p;
// Prints 3
cout << *p << endl;
//Prints 3    
cout << *data << endl;

最后两行代码打印3,我的问题是什么是 在delete p之后删除?根据它从 最后两行代码,似乎没有任何删除0.0 ~~

有人请向我解释。提前谢谢大家。

在使用delete D之后,将指针删除该对象是导致不确定行为的原因。不要指望任何可预测的行为并避免这种行为。

在不同角度和不确定的行为中产生的悬挂指针上的一本非凡的读物:可以在其范围之外访问本地变量的内存?

标准未定义发生的情况。就C 而言,地址无效,不应使用。如果您无论如何都会使用它会发生什么是任何人的猜测。

实际上,该内存通常坐在那里,直到其他需要它。您所做的只是说:"我不再需要它了。"您仍然可以随后访问一段时间,导致您对代码的适用性做出非常糟糕的假设,但是可以随时回收和重新分配。

如果该过程需要内存的其他内容,也许它得到了data指向的内容。在这种情况下,使用data可能会损坏程序的另一部分。这是一个非常糟糕的场景,因为当与错误完全无关的事物崩溃时,很难追踪真正发生的事情。

如果另一个过程需要内存,则可能的基础系统将内存倒退并将其放在另一个过程中。在将内存给予另一个过程后,在现代PC上访问data将是致命的。