我的问题是关于C语言的。 我必须创建一个包含大约 200 万个元素的大数组,但计算机给出了“段错误(核心转储)”错误。我只想说:
int integer_array[2000000];
float float_array[2000000];
我确信这与分配给数组的内存有关,但我想不出正确的解决方案。
最佳答案
通常你需要在堆上动态创建这样一个数组。
int *integer_array = (int*)malloc(2000000 * sizeof(int));
float *float_array = (float*)malloc(2000000 * sizeof(float));
数组可能对于堆栈分配来说太大了,例如如果不是全局使用,而是在函数内部使用。
int main () {
int a[200000000]; /* => SEGV */
a[0]=0;
}
最简单的修复方法,将数组移到外面:
int a[200000000];
int main () {
a[0]=0;
}
你也可以声明它是静态的:
int main () {
static int a[200000000];
a[0]=0;
}
请注意,堆栈大小取决于系统。可以用 ulimit 改变它。
关于在 C 中创建大型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43015080/