当我选择大于720的矩阵大小时,程序会以错误代码退出。原因是什么? [重复]

问题描述 投票:0回答:2

我试图在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;
}
c++ g++
2个回答
2
投票

double xy[n][n]这样的局部变量存储在堆栈中。在您的情况下,分配超过5 MB,这超过了某些操作系统上的默认堆栈大小。如评论中所述,这将导致堆栈溢出。

有两种解决方案:

  1. 使用链接器设置增加要为程序分配的堆栈大小。建议不要这样做,因为堆栈是在程序的整个运行时分配的。
  2. 在堆上分配数组变量,最好使用STL容器,例如std::vector<std::vector<double>> xy;

-2
投票

尝试在堆而不是堆栈上创建内存。此代码可能有所帮助。

double **dd = new double*[n];
for(int i = 0;i<n;i++){
    dd[i] = new double[n];
 }
© www.soinside.com 2019 - 2024. All rights reserved.