1000 * 1000是大於65536的。如果不是需求需要,沒必要開辟如此之多的空間。因為這些空間實在棧上申請的(如果是局部變量),棧的空間是有限的並且是寶貴的,所以呢,開辟太多的空間而不適用很可能會出現內存洩露。
數組下標一般是int或unsigned int類型,在32位機器上足夠定義出20億以上的下標范圍了。通常大數組出錯都不是它造成的,而是因為數組耗盡了棧空間的緣故。
定義大型數組應該盡量放在堆裡,別放在棧上。棧空間很有限,不該浪費它。
放堆裡有很多辦法:用new創建、定義為static數組、定義為全局數組等等。
具體:
static int a[1000][1000];
在占用內存空間較大的局部數組聲明的前面加static將其從堆棧數據段挪到全局數據段即可。
int (*p)[MAX] = new int[MAX][MAX];