我遇到了代码中的分段错误,我只能通过可用内存不足来解释。发生的事情是我正在尝试创建一个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说"错误读取变量:无法访问地址处的内存..."。
有什么想法吗?
答案 0 :(得分:2)
您正在尝试在堆栈上分配rnorm
,但是对于4096 * 4096个元素中的每个元素,分配为8个字节,大约为128 MB。这个存储空间可能没有足够的空间。
您应该使用malloc()
在堆上创建此数组。