以下程序产生分段错误,我不知道为什么.malloc成功,所以它似乎不是一个初始化错误,但由于某种原因,当我访问253900元素时它会段错误.该数组只有4*1e6字节,或大约一兆字节.
这确实产生了很多输出
#include <stdlib.h>
#include <stdio.h>
int *long_array(size_t N) {
int *arr = (int *) malloc(N);
if (arr == NULL) { printf("could not malloc"); exit(1); }
for (size_t i = 0; i < N; i++) {
printf(".. %ld ", i);
arr[i] = 10;
}
printf("done with loop\n");
return arr;
}
int main(void) {
int *arr = long_array(1000000);
printf("%d", arr[5050]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我编译它gcc -std=c99并运行输出以查看在segfault之前打印的最后几个数字:
253899 .. 253900 .. 2
segmentation fault (core dumped) ./a.out
Run Code Online (Sandbox Code Playgroud)
我不明白为什么访问特定索引会导致分段错误.我猜我必须访问我的进程地址空间之外的内存位置,但如果我从地址空间成功分配内存,这似乎是一个错误.