我的2D阵列太大了吗?

Dav*_* Xu 0 c++ arrays

我在下面运行代码并得到一些奇怪的输出:

#include <iostream>

using namespace std;

int main()
{
    for(int ll=1444; ll<1450; ++ll)
    {
        cout<<ll<<endl;

        cout<<"###### 0 #######"<<endl;
        int mtx[ll][ll];
        cout<<"###### 1 #######"<<endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

1444
###### 0 #######
###### 1 #######
1445
###### 0 #######
###### 1 #######
1446
###### 0 #######
###### 1 #######
1447
###### 0 #######
###### 1 #######
1448
###### 0 #######
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

我尝试用ll的值逐个检查,当ll达到1448时,确实发生了分段错误.

然后我将数组从int更改为bool,问题消失了.

基于ll值的计算:

ll=1447, total space of array is 1447*1447*4 = 8375236 bytes = 8178.95 Kbytes
ll=1448, total space of array is 1448*1448*4 = 8386816 bytes = 8190.25 Kbytes
Run Code Online (Sandbox Code Playgroud)

可能的原因是这个数组的大小是否大于默认页面大小?(如何在Ubunut 14.04中查看..?)

BTW,尝试用java并没有问题.

Gho*_*ooo 5

您正在将数组分配到堆栈中,默认堆栈大小通常为8 MB.

  • 你打败了我.我打算回答,"堆叠overflo,ooo,ooow!" (2认同)