作者cocoxyz1129 (老洪)
看板C_and_CPP
標題[問題]三維動態陣列
時間Mon Jan 25 15:23:13 2010
請問
我想做一個三維動態陣列
int p[10000][100000][3]
則會出現"size of array 'p' is to large"
那如果用動態陣列(以下)
p=(double***)malloc(n*sizeof(*p));
*p=(double**)malloc(n*n*sizeof(**p));
**p=(double*)malloc(n*n*n*sizeof(***p));
for(i=0;i<n;i++) *(p+i)=*p+i*n;
for(i=0;i<n;i++) **(p+i)=**p+i*n*n;
又跑不出來
不知道是哪邊出了問題
可以請大家幫幫我嗎?麻煩各位了!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.114.156
→ pico2k:改用64bit而且ram請加到16G以上... 01/25 15:24
→ loveme00835:這跟上上篇好像 01/25 15:29
→ Yshuan:動態的就不會 too large嗎.......... 01/25 15:30
→ loveme00835:原po請用迴圈的方式去配置 01/25 15:32
→ loveme00835:這應該跟stack的大小限制有關, heap就看你能定址多少 01/25 15:33
→ cocoxyz1129:沒有出現to large~只是要run的時候就run不出來 01/25 15:33
推 VictorTom:跑不出來是怎樣跑不出來, 把你問題描述清楚吧, 最好加上 01/25 15:43
→ loveme00835:*p=(double**)malloc(n*n*sizeof(**p));這行開始有錯 01/25 15:43
→ VictorTom:你所謂跑不出來的code, 與你預期"跑出來"什麼.... 01/25 15:44
→ VictorTom:順便說, 你要開 0x2CB417800 這麼大的記憶體喔 @_@" 01/25 15:44
→ VictorTom:而且, 這個三維陣列的配置方式好怪....Orz 01/25 15:48
→ cocoxyz1129:按完F9要開始RUN 輸入我的n值後~就會出現一個視窗說 01/25 15:48
→ cocoxyz1129:發生問題~必須關閉 01/25 15:49
→ cocoxyz1129:所以應該是我三維動態陣列配置有問題.....= =a 01/25 15:56
推 utomaya:什麼問題需要跑這樣大的陣列 說不定你可以不用開這麼大 01/25 17:08
→ adrianshum:3,000,000,000 個 element 了, 32 bit int 要 12GB 01/25 17:27
→ adrianshum:所以你說問題出在哪裡? 01/25 17:28
→ bugmens:我也很好奇是什麼樣的問題需要這麼大的空間 01/25 18:59
→ cocoxyz1129:因為我想要寫我要寫一個變數x[m][n][s]~ 01/25 19:46
→ cocoxyz1129:m不知道需要多少個,n要是要生100000個simulation, 01/25 19:49
→ cocoxyz1129:s=3,是每個simulation都會有3個值 01/25 19:51
→ cocoxyz1129:我想如果將s(=3)省略改成x0[m][n],x1[m][n],x2[m][n] 01/25 19:52
→ cocoxyz1129:3個二維陣列不知道會不會比較好? 01/25 19:53
推 Fenikso:不會. 因為memory使用量還是一樣多 01/25 20:10
推 justdemon:你要看資料連續性的問題 最常用到的放在最後一維 01/25 23:54
→ justdemon:不過如果一次才用三個 那就沒差了 XD 01/25 23:55
推 Hitmear:不要記在memory上阿...直接print out到file... 01/26 10:29
→ Hitmear:這種模擬的數據都是一次性資料 直接輸出就好 01/26 10:30