gpt4 book ai didi

c - 初始化数组的段错误

转载 作者:太空狗 更新时间:2023-10-29 16:07:34 24 4
gpt4 key购买 nike

下面的程序产生了一个段错误,我不确定为什么。 malloc 成功,所以它似乎不是初始化错误,但由于某种原因,当我访问第 253900 个元素时它会出现段错误。该数组只有 4 * 1e6 字节,或大约 1 兆字节。

这确实会产生很多输出

#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;
}

我用 gcc -std=c99 编译它并运行输出以查看在段错误之前打印的最后几个数字:

253899 .. 253900 .. 2
segmentation fault (core dumped) ./a.out

我不明白为什么访问特定索引会导致段错误。我猜想我一定是在访问我的进程地址空间之外的内存位置,但如果我成功地从我的地址空间内分配了内存,这似乎是一个错误。

最佳答案

malloc(sizeof(int)*N) 而不是 malloc(N)。否则你会得到一个 N 字节的数组,而不是 N 个整数。

关于c - 初始化数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512828/

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