当我选择大于720的矩阵大小时,程序会以错误代码退出。原因是什么? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我选择大于720的矩阵大小时,程序会以错误代码退出。原因是什么? [重复]相关的知识,希望对你有一定的参考价值。
我试图在C ++中运行以下代码,在每次迭代中打印数字,但它返回退出值:-1.073.xx
当n
小于720时它起作用。
int main() {
int n = 820;
double xy[n][n];
double k = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; j++) {
xy[i][j] = k;
k++;
cout << xy[i][j] << endl;
}
}
return 0;
}
答案
像double xy[n][n]
这样的局部变量存储在堆栈中。在您的情况下,分配超过5 MB,这超过了某些操作系统上的默认堆栈大小。如评论中所述,这将导致堆栈溢出。
有两种解决方案:
- 使用链接器设置增加要为程序分配的堆栈大小。建议不要这样做,因为堆栈是在程序的整个运行时分配的。
- 在堆上分配数组变量,最好使用STL容器,例如
std::vector<std::vector<double>> xy;
。
另一答案
尝试在堆而不是堆栈上创建内存。此代码可能有所帮助。
double **dd = new double*[n];
for(int i = 0;i<n;i++){
dd[i] = new double[n];
}
以上是关于当我选择大于720的矩阵大小时,程序会以错误代码退出。原因是什么? [重复]的主要内容,如果未能解决你的问题,请参考以下文章
具有外生变量矩阵的 statsmodels SARIMAX 大小不同
Visual c++ 6.0 应用程序大小大于 Visual Studio 2010 应用程序大小