2013-07-28 81 views
0

我想返回一個函數中的整數矩陣,並且我決定使用矩陣的typdef形式。但是,當我用一個函數返回1500的矩陣大小1500的項目運行該項目後編譯項目建成後崩潰。然後,我嘗試使用不同的矩陣大小,當我編寫一個代碼時,我將這個代碼粘貼到定義矩陣的較小尺寸(150)中,問題就解決了。這是我測試沒有問題。在大小增加時編譯數組數組時崩潰

typedef int Matrix[150][150]; 

int main(){ 
Matrix mat; 
for(int i=0;i<13;i++){ 
    for(int j=0;j<13;j++){ 
     mat[i][j]=i; 
    } 
} 
cout << mat[10][11]; 
return 0; 
} 

1500 1500的尺寸顯得非常小,我也弄不清是什麼原因造成的問題。

以下是錯誤圖像:

enter image description here

+0

僅供參考 - 對我而言它有效。 –

+0

我喜歡它,當一個問題在stackoverflow是有人吹了堆棧。每次都讓我微笑。 – PeterT

回答

1

一個1500 x 1500的ints矩陣在32位整數或者64位整數近18MB時將近9MB。這是一個巨大的堆棧分配,你可能會遇到編譯器或環境限制。可能有一些編譯時標誌可以解決這個問題,但更合理的解決方案是分配堆上的對象new

3

這矩陣獲取堆棧,這是隻有在默認情況下幾MB的分配。 1500 * 1500 * 4佔用9MB左右。像這樣的大數組最好分配在堆上(新建/刪除)。

1

您可能用完堆棧空間 - 1500 * 1500 * sizeof(例如,在32位系統上大致爲9兆字節。使用std :: vector或類似的東西(它從堆中分配),或者查看編譯器的必要開關,以增加堆棧大小...