首页  >  文章  >  后端开发  >  在 C 中删除指针指向的内存后,指针会发生什么?

在 C 中删除指针指向的内存后,指针会发生什么?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-01 01:48:02995浏览

What Happens to Pointers After Deleting the Memory They Point To in C  ?

删除后 C 中的指针行为

在 C 中,删除指针会释放它指向的内存。但是,指向已删除内存的指针的行为变得未定义或实现定义,具体取决于 C 版本。

考虑以下代码:

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

delete a;

A* c = a; // Assuming undefined or implementation-defined in C++11
A* d = b; // Supposed to be legal</code>

读取以下值已删除指针的副本 (b)

在 C 11 中,删除 a 后读取 b 的值是未定义的行为。然而,在 C 14 中,它是实现定义的。这是因为删除 a 后,指针 b 本身就变成了“无效的指针值”。

实现定义的行为

在 C 14 中,使用无效的指针值,包括复制它,具有实现定义的行为。这意味着编译器可以决定在这种情况下做什么。在某些实现中,它可能会生成运行时错误,而在其他实现中,它可能允许操作,但在随后使用指针时会导致未定义的行为。

合法还是未定义?

因此,A* c = a;且 A* d = b;在 C 11 中未定义,在 C 14 中由实现定义。复制的指针值 (b) 被视为无效指针值,其使用取决于实现的定义。

以上是在 C 中删除指针指向的内存后,指针会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

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