作者leehoni (leehoni)
看板C_and_CPP
標題[問題] 請問大陣列宣告後運算出現問題
時間Thu Mar 12 21:32:41 2009
請問各位大大
為了命很大的陣列rt[258][258][500],用了如下方法:
int ***rt=new int**[258];
rt[258] = new int*[258];
rt[258][258] = new int[500];
但是 再運算的時後,卻發生問題
for(i=0;i<258;i++)
{for(j=0;j<258;j++)
{for(k=0;k<500;k++)
{
rt[i][j][k]=0; <---這裡出現bug
}}}
到底問題出在哪裡?
謝謝<(_ _)>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.135.93
1F:推 VictorTom:rt[258]是不能用的, size 258所以只有0~257可以用:) 03/12 21:36
2F:→ VictorTom:理論上應該會有memory access violation的錯誤報出來吧? 03/12 21:36
3F:→ leehoni:不過程式一直到那執行到一行才顯示錯誤@@" 03/12 21:38
4F:推 chrisdar: int ***rt = new int**[258]; 03/12 21:38
5F:→ chrisdar: for (int i = 0;i < 258;++i) { 03/12 21:38
6F:→ chrisdar: rt[i] = new int*[258]; 03/12 21:38
7F:→ chrisdar: for (int j = 0;j < 258;++j) { 03/12 21:38
8F:→ chrisdar: rt[i][j] = new int[500]; 03/12 21:38
9F:→ chrisdar: } 03/12 21:38
10F:→ chrisdar: } 03/12 21:38
11F:→ chrisdar: for (int i = 0;i < 258;++i) { 03/12 21:38
12F:→ chrisdar: for (int j = 0;j < 258;++j) { 03/12 21:38
13F:→ chrisdar: for (int k = 0;k < 500;++k) { 03/12 21:38
14F:→ chrisdar: rt[i][j][k] = 0; 03/12 21:38
15F:→ chrisdar: } 03/12 21:38
16F:→ chrisdar: } 03/12 21:38
17F:→ chrisdar: } 03/12 21:38
※ 編輯: leehoni 來自: 118.168.135.93 (03/12 21:39)
18F:→ chrisdar:很正常阿 ... 不知道哪邊錯了 03/12 21:39
19F:推 VictorTom:如果像樓上c板友這樣應該除非mem要爆了不然應該是ok.... 03/12 21:46
20F:→ VictorTom:可是如果code真的像原po文裡寫的, 一定mem access vio的 03/12 21:46
21F:→ leehoni:c板大的就不會bug耶 謝謝~~ 不過這樣用的原因是什麼阿? 03/12 21:50
22F:推 VictorTom:所以你的code就像你文裡寫的?? 那就真的是記憶體存取錯 03/12 21:51
23F:→ leehoni:對 應該是記憶體存取錯了~~ 03/12 21:52
24F:→ VictorTom:誤啊, rt[258]是不能用的; 還有, 你要幫rt[0]~[257]一個 03/12 21:52
25F:→ VictorTom:一個跑迴圈new, 不能用你原來那樣子的寫法.... 03/12 21:52
26F:→ VictorTom:在板上找找二維或三維以上動態配置的範例看吧~_~ 03/12 21:53
27F:→ leehoni:3Q~ 03/12 21:53