C:解决由于内存不足而导致的分段错误

  • 本文关键字:分段 错误 内存不足 解决 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()调用AdjMatOnestep(),一旦我调用最后一个函数,我就会得到一个分段错误。我什至没有进入它的第一行。DDD 显示"读取变量时出错:无法访问地址处的内存..."。

有什么想法吗?

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

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

最新更新