[問題] 大型二維陣列

看板C_and_CPP (C/C++)作者 (MR.黃)時間15年前 (2011/02/11 12:09), 編輯推噓6(608)
留言14則, 6人參與, 最新討論串1/1
目前在做一個比對的程式 會用到10萬以上得長度(自討苦吃 因為要儲存結果所以會用到二維陣列 目前我的程式碼 int STRLEN = 100000; int **H,**Hg; H = (int**)malloc(STRLEN*sizeof(int*)); Hg = (int**)malloc(STRLEN*sizeof(int*)); for(j=0 ; j<STRLEN ; j++) { H[j] = (int*)malloc(STRLEN*sizeof(int)); Hg[j] = (int*)malloc(STRLEN*sizeof(int)); //一直到這裡都沒問題接下來問題來了 H[0][j]=Hg[0][j]=0; H[j][0]=Hg[j][0]=0;//我在令這一行為0時跑到一半就掛掉了,原因不明 } 但是如果數字到10000而已的話,卻是沒有問題的,不能理解為什麼會這樣, 應該不會是MALLOC的問題分開測試過了。 PS 很奇妙的我用兩台不同的電腦測過,程式都是在當STRLEN=100000 j=2637 時跳掉, 但是STRLEN = 10000 時卻又順利跑過去了,有點鬼打牆的感覺。 請問一下該如何解決呢? 感恩! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.118.131

02/11 12:12, , 1F
檢查 malloc 傳回的值, 如果為NULL表示沒記憶體用了
02/11 12:12, 1F

02/11 12:19, , 2F
你的ram 夠大嗎?當 strlen =100000 時要多少記憶體有算過嗎
02/11 12:19, 2F

02/11 12:24, , 3F
32bit 頂多4G STRLEN=100000 需160G
02/11 12:24, 3F

02/11 12:24, , 4F
我的記憶體有4G,10萬*10萬*4理應還沒超過吧
02/11 12:24, 4F

02/11 12:24, , 5F
喔喔 我算錯囉><
02/11 12:24, 5F

02/11 12:26, , 6F
Windows 的 user space 2G or 3G Linux 3G
02/11 12:26, 6F

02/11 12:27, , 7F
不過我只做配置的話是沒問題的耶,是在令他為0時才會錯
02/11 12:27, 7F

02/11 12:27, , 8F
所以也無法配置到 4G
02/11 12:27, 8F

02/11 12:30, , 9F
malloc 失敗會 return NULL
02/11 12:30, 9F

02/11 12:30, , 10F
同一樓 你有沒有檢查是不是NULL malloc那行當然不會錯
02/11 12:30, 10F

02/11 12:30, , 11F
沒存取當然沒事
02/11 12:30, 11F

02/11 12:31, , 12F
喔喔我了解了,感謝~
02/11 12:31, 12F

02/11 12:33, , 13F
我算錯 40G才是
02/11 12:33, 13F

02/11 13:02, , 14F
動態陣列試試看~
02/11 13:02, 14F
文章代碼(AID): #1DLBQ3Jq (C_and_CPP)
文章代碼(AID): #1DLBQ3Jq (C_and_CPP)