【发布时间】:2017-09-06 01:47:38
【问题描述】:
我遇到了我的代码中的分段错误,我只能通过可用内存不足来解释。发生的事情是我正在尝试创建一个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 说“错误读取变量:无法访问地址...的内存”。
有什么想法吗?
【问题讨论】:
-
大多数 CPU 架构对堆栈帧大小的限制非常小,因此您无法分配巨大的本地数组。
-
const int N=16**3;?? -
C 中没有
**运算符。
标签: c