【发布时间】:2020-10-16 22:02:25
【问题描述】:
据我了解,分段错误发生在程序因尝试访问不可用的内存而崩溃时。我知道第一个程序(A.c)是错误的,因为 sizeof(a) 是 4bytes * 5 = 20bytes。由于无限循环,第二个程序(B.c)是错误的。当我运行 A.out 时,我没有收到错误,只是结果不正确(结果也不一致)。但是当我运行 B.out 时,我得到了分段错误。
我预计 A 会出现与 B 相同的分段错误,因为它们都访问超出范围的内存数据。我最好的猜测是 int a[5] = {1, 2, 3, 4, 5}; 可能会导致这种情况。谁能告诉我为什么?
交流
int main() {
int a[5] = {1, 2, 3, 4, 5};
unsigned total = 0;
printf("size of a is %lu\n", sizeof(a));
printf("total was %d\n", total);
for (int j = 0; j < sizeof(a); j++) {
total += a[j];
}
printf("sum of array is %d\n", total);
}
B.c
int main() {
int a[20];
for (int i = 0; ; i++) {
a[i] = i;
}
}
【问题讨论】:
-
B 中的无限循环。但操作系统会在分段错误时发现您。
-
没错。但我想知道为什么 A 不会产生分段错误。
-
看我的回答。下。
-
没有保证操作系统会为您找到错误。如果你幸运的话,你很早就会撞车。如果运气不好,您在发货时会崩溃。
标签: c memory-leaks segmentation-fault