已删除的指针指向什么

What does a deleted pointer point to?

本文关键字:什么 指针 删除      更新时间:2023-10-16
int*a=nullptr; //NULL before C++11
a=new int(1);
delete a;

a现在指向什么?它是指向nullptr还是指向删除前指向的地址?

其他一些答案错误地说"值不会改变"。然而,它确实如此:删除前有效,删除后无效;这是一个变化。

此外,值的表示形式也可能发生变化。例如,实现可以将a设置为 null,或者调试器将识别的某种模式,以帮助检测变量的无效用法。

根据C++标准(6.7 存储持续时间)

4 当存储区域的持续时间达到结束时, 表示其任何部分地址的所有指针的值 存储区域变为无效指针值 (6.9.2)。 通过无效指针值间接传递并传递无效指针值 指向释放函数的指针值具有未定义的行为。任何 无效指针值的其他用法已定义实现 行为。

所以在这个表达式语句之后

delete a;

指针a的值未更改,但已变为无效。此地址中不存在任何对象。

它没有指向任何东西。您现在无法对其价值做任何有用的事情。

不要将指针的值与它指向的内容混淆。 删除后,指针的值保持不变。 它没有设置为nullptr或类似的东西。 它指向的东西是未定义的。 通常,它最终会指向它以前所做的事情,这导致了各种有趣的错误。

相关文章: