我在代码中遇到了一个分段错误,我只能通过可用内存不足来解释。正在发生的事情是,我正在尝试创建一个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()
在堆上创建此数组。