我对 clang 中的 catch-undefined-behavior 标志有疑问。我在一个用 C 编写的大型项目中进行了尝试,其中有一次,用户提供的整数值 (i) 到达。然后我添加了以下代码:
int arr[3]
arr[i] = 1234;
但是当我使用 gdb 运行代码时,它只会在变量 i 的值为 4 或更大时停止。因此,当我将值 3 传递给 i 时,它仍然会访问其边界之外的数组而不会停止。
这是 -fcatch-undefined-behavior 的已知限制吗?还是只检查访问是否在堆栈框架之外,而不是在本地数组之外?
最好的问候克里斯蒂安
PS:我使用 clang+llvm 3.0 作为编译器/链接器。目标是 x86。该程序在 Windows XP 机器上的 xubuntu 12.04 虚拟机中运行。