【问题标题】:Crash on compiling an array of arrays when size increases大小增加时编译数组数组时崩溃
【发布时间】:2013-07-28 23:17:10
【问题描述】:

我试图在函数中返回一个整数矩阵,我决定使用typdef 形式的矩阵。但是,当我使用返回 1500 x 1500 矩阵大小的函数运行项目时,编译在项目构建后崩溃。然后我尝试使用不同的矩阵大小,当我为定义的矩阵编译我粘贴在这里的代码时,使用较小的大小(150),问题就解决了。这是我测试的没有问题。

typedef int Matrix[150][150];

int main(){
Matrix mat;
for(int i=0;i<13;i++){
    for(int j=0;j<13;j++){
        mat[i][j]=i;
    }
}
cout << mat[10][11];
return 0;
}

1500 x 1500 的大小似乎非常小,我无法弄清楚它导致了什么问题。

这是错误图片:

【问题讨论】:

  • 仅供参考 - 对我来说它有效。
  • 当 stackoverflow 上的一个问题是有人炸毁了堆栈时,我喜欢它。每次都让我微笑。

标签: c++ arrays memory matrix size


【解决方案1】:

该矩阵被分配在 stack 上,默认情况下只有几 MB。 1500*1500*4 占用大约 9MB。像这样的大型数组最好分配在 (新建/删除)上。

【讨论】:

    【解决方案2】:

    一个 1500 x 1500 的整数矩阵在 32 位整数中接近 9MB,在 64 位整数中接近 18MB。这是一个巨大的堆栈分配,您可能会遇到编译器或环境限制。可能有一些构建时标志可以解决该问题,但更合理的解决方案是使用 new 在堆上分配对象

    【讨论】:

      【解决方案3】:

      您可能用完了堆栈空间 - 例如,在 32 位系统上,1500*1500*sizeof(int) 大约是 9 兆字节。使用 std::vector 等(它从堆中分配)或查找编译器所需的开关以增加堆栈大小...

      【讨论】:

        猜你喜欢
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 2015-01-26
        • 1970-01-01
        相关资源
        最近更新 更多