删除指针的后果

时间:2013-02-05 14:56:11

标签: c++ memory-management

Object *p = new Object();
delete p;

当我删除p时,删除堆上的对象分配。但是p本身究竟发生了什么?它是从堆栈中删除的吗?或者它仍然在堆栈中,仍然包含以前保存对象的内存地址?

5 个答案:

答案 0 :(得分:8)

p仍然在堆栈中,并保留您刚刚删除的Object的地址。您可以自由重复使用p,将其指定为指向其他已分配的数据或NULL / nullptr

答案 1 :(得分:2)

p是一个变量,对吧。所以它的生命周期是在编译时确定的,而不是在运行时确定的。

答案 2 :(得分:0)

你在这里得到的是dangling pointer - 你通常想要不惜一切代价避免的怪物。

答案 3 :(得分:0)

执行delete p时。 p指向的内存将被删除。

  

delete〜=析构函数+释放

此处delete只是一个术语,表示已释放内存。对OS的总内存量或变量p本身没有影响。 p仍然指向系统现在回收的内存,因此成为悬空指针

答案 4 :(得分:0)

指针变量仍然存在,但其值变为无效 - 除了分配另一个有效指针或空指针之外,对其执行任何操作都会产生未定义的行为。 There's no guarantee the pointer value is unchanged