首页 > 后端开发 > C++ > 正文

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

Mary-Kate Olsen
发布: 2024-11-01 01:48:02
原创
993 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!