c-相对较小阵列上的分段故障



我有一个用整数填充的数组:

#include <stdio.h>
#define MAX 4000000
int main() {
int primes[MAX + 1];
// init array with all numbers
for(int i = 1; i <= MAX; i++)
primes[i] = i;
return 0;
}

对于4字节整数,这似乎只需要使用4M*4或16MB。但是我在运行这个程序时遇到了分段错误。我不明白为什么。

对于任何太大而无法容纳在堆栈上的结构,解决方案是动态分配:

#include <stdio.h>
#include <stdlib.h>
#define MAX 4000000
int main() {
int* primes = calloc(MAX + 1, sizeof(int));
// init array with all numbers
for(int i = 1; i <= MAX; i++)
primes[i] = i;
free(primes);
return 0;
}

最新更新