gpt4 book ai didi

c - 为什么数组索引越界时GDB会显示正常退出的状态?

转载 作者:行者123 更新时间:2023-11-30 14:31:44 26 4
gpt4 key购买 nike

void main()
{
int arr[3] = {1,2,3,4,5,6};
for(int i=0;i<6;i++)
{
printf("arr is %d\n", arr[i]);
}
}

这是 GDB 的输出:

Starting program: /home/mayank/practice/test1 
arr is 1
arr is 2
arr is 3
arr is -1192452352
arr is 1079472019
arr is 1431652464

[Inferior 1 (process 29328) exited normally]
(gdb)

最佳答案

如果越界访问数组,则会出现未定义的行为。未定义的行为就是:未定义。可能什么都不会发生,或者你的程序可能会崩溃,这一切都取决于月亮是否在第七宫,或者著名的 nasal demons 。可能会打扰你。

在您的测试程序中,您只需读取分配的数组后面。通过对实际编译器和目标系统的一些了解,您可以解释到底发生了什么。在许多情况下,就像你的情况一样,除了打印奇怪的值之外,没有什么不好的事情发生。因此,应用程序愉快地退出。

只要您不指示 GDB 监视您的应用程序对数组外部的访问,GDB 就不会注意到这一点。

注意:某些编译器可以选择检测生成的代码以检查数组索引。

关于c - 为什么数组索引越界时GDB会显示正常退出的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60147701/

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