我正在尝试在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];
}