我的问题与C语言有关。我必须创建一个大约 200 万个元素的大数组,但计算机给出了“分段错误(核心转储)”错误。我简单地说:
int integer_array[2000000];
float float_array[2000000];
Run Code Online (Sandbox Code Playgroud)
我确信这与分配给数组的内存有关,但我无法找出正确的解决方案。
通常你需要在堆上动态创建这样一个数组。
int *integer_array = (int*)malloc(2000000 * sizeof(int));
float *float_array = (float*)malloc(2000000 * sizeof(float));
Run Code Online (Sandbox Code Playgroud)
对于堆栈分配,数组可能太大,例如,如果不是全局使用,而是在函数内部使用。
int main () {
int a[200000000]; /* => SEGV */
a[0]=0;
}
Run Code Online (Sandbox Code Playgroud)
最简单的解决方法,将数组移到外面:
int a[200000000];
int main () {
a[0]=0;
}
Run Code Online (Sandbox Code Playgroud)
您也可以将其声明为静态:
int main () {
static int a[200000000];
a[0]=0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,堆栈大小取决于系统。可以使用 ulimit 更改它。