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

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

Susan Sarandon
Susan Sarandon原创
2024-11-01 11:29:30853浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn