gpt4 book ai didi

c - -fcatch-undefined-behavior 只捕获大于 1 个元素的本地数组访问

转载 作者:太空狗 更新时间:2023-10-29 15:41:08 25 4
gpt4 key购买 nike

我对 clang 中的 catch-undefined-behavior 标志有疑问。我在一个用 C 编写的大项目中进行了尝试,在某一时刻,用户提供的整数值 (i) 到达了。然后我添加了以下代码:

int arr[3]
arr[i] = 1234;

但是当我用 gdb 运行代码时,它只会在变量 i 的值为 4 或更大时停止。因此,当我将值 3 传递给 i 时,它仍然会不停地访问其边界之外的数组。

这是 -fcatch-undefined-behavior 的已知限制吗?或者它是否只检查访问是否在堆栈框架之外,而不是在本地数组之外?

最好的问候基督徒

P.S.:我使用 clang+llvm 3.0 作为编译器/链接器。目标是 x86。该程序在 Windows XP 机器上的 xubuntu 12.04 虚拟机中运行。

最佳答案

ISO C 标准的附件 J 列出了以下与您的问题相关的未定义行为:

  • 在一个数组对象和一个数组对象中添加或减去一个指针整数类型产生的结果不指向或超出同一数组对象(6.5.6)。
  • 在一个数组对象和一个数组对象中添加或减去一个指针整数类型产生一个指向数组对象之外的结果,用作评估的一元 * 运算符的操作数 (6.5.6)。

根据您的帖子,Clang 的 -fcatch-undefined-behavior 似乎只能捕获这两个行为中的第一个。

关于c - -fcatch-undefined-behavior 只捕获大于 1 个元素的本地数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13099483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com