0

我试图在函数中返回一个整数矩阵,我决定使用一种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 的大小似乎非常小,我无法弄清楚它导致了什么问题。

这是错误图像:

在此处输入图像描述

4

3 回答 3

3

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

于 2013-07-28T23:21:51.247 回答
1

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

于 2013-07-28T23:24:38.657 回答
1

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

于 2013-07-28T23:25:06.757 回答