gpt4 book ai didi

使用变量索引的 C 段错误与使用数字索引数组的无错误相比

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:17 26 4
gpt4 key购买 nike

为什么下面的代码没有给出段错误

#include <stdio.h>
int main(){
int i = 0;
int x [10];
while(i < 500){
x[500] = 3;
printf("%d", x[500]);
i++;
}
}

但是这段代码可以。

#include <stdio.h>
int main(){
int i = 0;
int x [10];
while(i < 500){
x[i] = 3;
printf("%d", x[i]);
i++;
}
}

我决定做一些实验来查看系统调用 strace 并想看看操作系统如何处理段错误。我写了第一段代码,期望出现段错误,但没有得到段错误,并且很困惑,因为我正在写入不属于我的内存。所以我记得使用循环遇到错误并得到第二段代码,这给了我一个段错误。现在我不明白为什么使用 i 来索引数组与使用数组绑定(bind)之外的索引相比会改变,无论我是否遇到段错误。

最佳答案

您在这两个示例中都越界了,这是未定义的行为。现在任何事情都可能发生,并且不能保证 UB 的一个实例会与另一个实例做同样的事情。

关于使用变量索引的 C 段错误与使用数字索引数组的无错误相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635024/

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