首页  >  文章  >  后端开发  >  ## 在 C/C 中存储无效指针总是未定义的行为吗?

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

Patricia Arquette
Patricia Arquette原创
2024-10-26 02:34:27847浏览

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

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