删除的指针指向什么?

时间:2017-11-01 19:37:14

标签: c++ c++11

int*a=nullptr; //NULL before C++11
a=new int(1);
delete a;

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

4 个答案:

答案 0 :(得分:6)

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

  

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

所以在这个表达式声明之后

delete a;

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

其他一些答案错误地说“值不会改变”。但它确实如此:在删除之前它是有效的,并且在删除之后它是无效的;这是一个改变。

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

答案 3 :(得分:3)

它没有指向任何东西。现在你的价值没有用。