已删除的指针指向什么
What does a deleted pointer point to?
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
或类似的东西。 它指向的东西是未定义的。 通常,它最终会指向它以前所做的事情,这导致了各种有趣的错误。
相关文章:
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 将指针分配给另一个指针时会发生什么情况?
- 当该数组的索引中没有元素时,指针指向什么?
- C++:Lambda 函数指针转换的用例是什么?
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 为什么此指针值不能转换为整数的规则是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 以下与指针相关的代码的输出是什么?
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- C++:在向量中插入什么 - 指针或引用,矢量何时复制它的元素?