2016-06-12 122 views
-1

我試圖做一個一維數組在C 89401個元素:拋出異常錯誤

double **A = (double**)malloc(89401*sizeof(double*)); 

for (i = 0; i<89401; i++)  

    A[i] = (double*)malloc(89401*sizeof(double)); 

但我不斷收到此錯誤:

Exception thrown at 0x003F61E0 in final project 2.exe: 0xC0000005: Access violation writing location 0x00000000. 

我不能找出問題所在。我在網站上搜索了以前提出的問題,但沒有一個對我有所貢獻。

如果有這種異常的處理程序,程序可能會安全地繼續。

+0

在嘗試將某個元素指定給它所指向的元素之前,請檢查'A'是否不是'NULL'。 – MikeCAT

+1

如果'sizeof(double)'是8,這將需要大約59.5GB的內存。你的系統有足夠的RAM(+ swap)來存儲這些大數據嗎? – MikeCAT

+1

**始終**檢查與程序執行相關的功能錯誤結果。另外,不要在C中一般投放'malloc'&friends或'void *'的結果! – Olaf

回答

1

你犯了兩個錯誤。 第一個是,你說,你試圖創建「89401大小的1d數組」。事實上,你嘗試分配89401 * 89401雙打,這似乎是二維數組。正如@MikeCAT寫的這是一個巨大的數字,89401 * 89401 * 8個字節,如果你有8個字節的雙打。 第二個問題是,當malloc的內存分配不成功時,即結果爲NULL時,您不處理。