有一个奇怪的段错误。以下代码运行良好
#include <stdlib.h>
#include <stdio.h>
main()
{
int matrixSize = 1000;
int i,j;
double a[matrixSize][matrixSize];
for (i = 0; i < matrixSize; i++)
for (j = 0; j < matrixSize; j++)
a[i][j] = rand() % 10;
double b[matrixSize][matrixSize];
for (i = 0; i < matrixSize; i++)
for (j = 0; j < matrixSize; j++)
b[i][j] = rand() % 10;
return 0;
}
但是当我尝试再初始化一个二维数组时,出现“段错误”异常:
#include <stdlib.h>
#include <stdio.h>
main()
{
int matrixSize = 1000;
int i,j;
double a[matrixSize][matrixSize];
for (i = 0; i < matrixSize; i++)
for (j = 0; j < matrixSize; j++)
a[i][j] = rand() % 10;
double b[matrixSize][matrixSize];
for (i = 0; i < matrixSize; i++)
for (j = 0; j < matrixSize; j++)
b[i][j] = rand() % 10;
return 0;
}
潜在原因是什么?
最佳答案
您很可能超出筹码量。
在您用来运行它的终端中,尝试输入
ulimit -s 无限
然后重新运行,假设您在使用 bash(或 sh)的 Linux 系统上。
如果你必须使用那个大小的数组,你可以使它们动态化,这样如果由于某种原因改变堆栈大小有问题,它们就在堆上而不是堆栈上。
关于c - 二维数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556242/