a[1000][1000]程序崩溃

  1000 * 1000是大于65536的。如果不是需求需要,没必要开辟如此之多的空间。因为这些空间实在栈上申请的(如果是局部变量),栈的空间是有限的并且是宝贵的,所以呢,开辟太多的空间而不适用很可能会出现内存泄露。

  数组下标一般是int或unsigned int类型,在32位机器上足够定义出20亿以上的下标范围了。通常大数组出错都不是它造成的,而是因为数组耗尽了栈空间的缘故。

定义大型数组应该尽量放在堆里,别放在栈上。栈空间很有限,不该浪费它。

放堆里有很多办法:用new创建、定义为static数组、定义为全局数组等等。

  

具体:

static int a[1000][1000];
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。

int  (*p)[MAX] = new int[MAX][MAX]; 

原文地址:https://www.cnblogs.com/wswang/p/5127754.html