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

存储无效的指针地址是未定义的行为吗?

Patricia Arquette
发布: 2024-10-26 10:08:03
原创
297 人浏览过

Is Storing an Invalid Pointer Address Undefined Behavior?

存储无效指针

虽然取消引用无效指针会导致未定义的行为,但出现了一个不太明确的问题:在指针变量中存储无效内存地址的行为本身就是未定义行为吗?

考虑以下代码片段:

<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 节概述了当指针指向数组元素并且数组足够大或操作数指向最后一个数组元素时指针算术的语义。上述情况中的行为不属于这些特定情况。因此,存储无效指针是通过省略未定义行为

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

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