我在下面运行代码并得到一些奇怪的输出:
#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并没有问题.
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |