首页 > 后端开发 > C++ > 在 C 中删除一个引用同一对象的指针后会发生什么?

在 C 中删除一个引用同一对象的指针后会发生什么?

Susan Sarandon
发布: 2024-11-01 11:29:30
原创
852 人浏览过

What Happens to Pointers Referencing the Same Object After One is Deleted in C  ?

C 中指向已释放内存的指针

删除指针后,引用同一对象的其他指针的有效性会出现混乱。本文旨在阐明 C 中的这种行为。

考虑以下代码:

<code class="cpp">A* a = new A();
A* b = a;

delete a;

A* c = a; // Illegal (C++11)
A* d = b; // Debatable legality

// Points to deallocated memory, Undefined in C++11
A* aAddr = &a;</code>
登录后复制

C 11 行为:

  • 赋值从先前删除的指针 a 到 c 会导致未定义的行为,因为 a 现在是无效的指针值。
  • 但是,d 指向删除之前创建的 a 的副本。虽然读取 b 的值指向已释放的内存位置,但此操作是实现定义的。

C 14 行为:

  • 分配给来自无效指针 a 的 c 和 d 仍然会导致未定义的行为。
  • 复制无效指针的值(如此处对 b 所做的那样)也是实现定义的行为。

根据 C 11 标准,使用无效的指针值(包括复制它)会导致未定义的行为。在 C 14 中,此类操作具有实现定义的行为,这意味着该行为可能会因不同的编译器和操作系统而异。

因此,在 C 11 和 C 14 中,避免使用已被实现的指针至关重要。已删除或引用已释放的内存。这样做可能会导致不可预测和潜在错误的行为。

以上是在 C 中删除一个引用同一对象的指针后会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板