试过这个
int main(void){
int a [10]; 一个[20] = 5;
}
gcc -Wall -O2 main.c
它没有给我任何警告......
它是windows(mingw)中的gcc,我无法检测到这种边界限制错误
如何告诉编译器检查它?可以搞定吗?
感谢
答案 0 :(得分:2)
尝试处理数组边界检查。默认情况下,santdard C99没有提及强制执行数组边界,我相信很大程度上是因为它有更多的开销。
话虽如此,你可以看看人们试图解决这个问题的网站:
答案 1 :(得分:1)
还有其他非编译器工具可以使用静态分析来查找数组边界违规等错误。之前的SO question讨论了其中一些问题。请注意,如果您需要在可能限制您选择的mingw环境中奔跑。
答案 2 :(得分: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