4

试过这个

诠释主要(无效){

诠释一个[10];a[20]=5;

}

gcc -Wall -O2 main.c

它没有给我任何警告...

它是 windows (mingw) 内的 gcc,我无法检测到这种边界限制错误

如何告诉编译器检查它?mingw可以吗?

谢谢

4

3 回答 3

2

有人尝试处理数组边界检查。默认情况下,标准 C99 没有说明强制数组边界,我相信主要是因为它有更多的开销。

话虽如此,您可以查看人们尝试处理的此类网站:

http://williambader.com/bounds/example.html

于 2010-06-10T13:41:48.247 回答
1

这个问题很老了,但我想我在这里得到了另一个答案。即使您打算在 gcc 上进行完整构建,您也可以尝试使用 clang 编译器(例如,对于大型项目中的夜间构建)。它工作得很好。

一个示例是当我尝试访问数组大小被声明为 4 的索引 4 时的输出:

    ex9.c:17:2: warning: array index 4 is past the end of the array (which contains
          4 elements) [-Warray-bounds]
            numbers[4] = 4;
            ^       ~
    ex9.c:4:2: note: array 'numbers' declared here
            int numbers[4] = {0};
            ^

谢谢卡哈尔

于 2013-07-14T09:54:09.557 回答
1

还有其他非编译器工具可以使用静态分析来查找数组边界违规等错误。以前的SO question讨论了其中一些问题。请注意,如果您需要在可能会限制您的选择的 mingw 环境中运行。

于 2010-06-10T15:06:15.883 回答