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

## 在 C/C 中存储无效指针总是未定义的行为吗?

Patricia Arquette
发布: 2024-10-26 02:34:27
原创
855 人浏览过

## Is Storing an Invalid Pointer Always Undefined Behavior in C/C  ?

存储无效指针总是未定义行为吗?

在 C 和 C 中,取消引用无效指针会导致未定义行为。然而,出现了一个问题:仅仅在指针变量中存储无效的内存地址是否会构成未定义的行为?

考虑以下代码:

<code class="c">const char* str = "abcdef";
const char* begin = str;
if (begin - 1 < str) { /* ... do something ... */ }</code>
登录后复制

这里,表达式 begin - 1 的计算结果为无效的内存地址。虽然我们避免取消引用它,但我们在指针算术中利用它来确定其有效性。那么,考虑到某些架构可能在将无效指针加载到寄存器时触发总线错误,此操作是否会导致未定义的行为?

这个问题的答案位于 C 或 C 标准中。根据 C 标准草案,存储无效指针确实是未定义的行为。标准的第 6.5.6/8 节定义了指针算术,但它没有明确涵盖操作数指向无效内存地址的情况。

因此,由于遗漏,C 标准未指定这种情况,使其呈现未定义的行为。因此,根据当前标准,在指针变量中存储无效指针,即使未取消引用,也会被视为 C 和 C 中的未定义行为。

以上是## 在 C/C 中存储无效指针总是未定义的行为吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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