C:由于内存可能不足而解决分段错误

时间:2017-04-10 21:09:58

标签: c

我遇到了代码中的分段错误,我只能通过可用内存不足来解释。发生的事情是我正在尝试创建一个NxN矩阵,其中N是一个很大的数字。对于N=8,程序运行正常,但对于N>=16³=5000,我会自动获得分段错误。这是ew有没有简单的方法来解决这个问题?我实际上想要尽可能模拟范围N=64³的大小,所以这对我来说是一个非常重要的问题。

我的代码结构如下。

const int N=16**3;
int main(int argc, const char * argv[]) {
double rnorm[N][N];
...
}

void Diluisci(..., double rnorm[N][N]{
...
AdjMatOnestep(rnorm);
}

void AdjMatOnestep(double rnorm[][N]){
...}

因此main()调用调用Diluisci()的{​​{1}},并且一旦调用此最后一个函数,我就会遇到分段错误。我甚至没有进入它的第一行。 DDD说"错误读取变量:无法访问地址处的内存..."。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您正在尝试在堆栈上分配rnorm,但是对于4096 * 4096个元素中的每个元素,分配为8个字节,大约为128 MB。这个存储空间可能没有足够的空间。

您应该使用malloc()在堆上创建此数组。