如何在gcc/mingw中进行边界检查?

5

我尝试了这个:

int main(void) {

int a[10]; a[20]=5;

}

使用命令:

gcc -Wall -O2 main.c

但是没有任何警告...

我在Windows系统中使用的是gcc(mingw),无法检测到这种边界限制错误。

请问如何让编译器检查这个错误?mingw能够实现吗?

谢谢!


3
如果你不能升级你的编译器,那就升级你的程序员。 - Amardeep AC9MF
可能是重复问题 https://dev59.com/XnRC5IYBdhLWcg3wMd9S - James
3个回答

2

有尝试解决数组边界检查的方法。默认情况下,标准的C99不会强制执行数组边界,我认为主要是因为它具有更多的开销。

话虽如此,您可以查看像这样的网站,人们已经尝试解决这个问题:

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


很好,这个项目http://sourceforge.net/projects/boundschecking/有针对gcc的“补丁”,可以添加-fbounds-checking标志,我认为它们只适用于Linux,但这是一个开始.. - Hernán Eche

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};
            ^

感谢Kajal。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接