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