gpt4 book ai didi

c++ - gcc 检测到 "subindex out of bound"错误

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

我意外地发现gcc在编译C时可以发现这个错误。我简化了仍然触发警告的代码。我发布问题是为了弄清楚它使用的技术的细节。下面是我的文件 a.c

的代码
int main(){
int a[1]={0};
return(a[1]);
}

我的 gcc 版本是 gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3。使用gcc a.c -Wall时,没有警告;使用gcc -O1 a.c -Wall时,出现警告:

warning: ‘a[1]’ is used uninitialized in this function [-Wuninitialized]

并且在使用gcc -O2 a.c -Wall(或-O3)时,还有另一个警告:

warning: array subscript is above array bounds [-Warray-bounds]

最令人惊讶的是,当我给 a[1] 一个值时,上述编译选项都没有给出任何警告。即使我将索引更改为巨大的数字也没有警告(当然编译文件会冒犯操作系统并被踢出),

int main(){
int a[1]={0};
a[2147483648]=0;
return(a[2147483648]);
}

我认为上述现象与其说是一个bug,不如说是一种功能。我希望有人能帮我弄清楚会发生什么,和/或为什么编译器是这样设计的。非常感谢!

最佳答案

访问数组末尾之后的内存会导致 undefined behaviour .

gcc 非常好,可以检测并警告您其中的一些错误。但是,它没有义务这样做,当然也不能期望捕获所有此类错误。

关于c++ - gcc 检测到 "subindex out of bound"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18552668/

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