請問有關三維動態陣列的宣告及初始化錯誤 |
答題得分者是:syntax
|
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
各位前輩好 小弟最近寫程式需要用到三維陣列, 為了節省記憶體空間打算使用動態配置記憶體方式來宣告
下面是我的程式碼(縮排有點亂抱歉 因為搞不定心情很慌亂) [code cpp] [前面xyz max...參數宣告我就省略了] int ***vote = new int**[max_a]; for(x=0;x vote[x] = new int*[max_b]; for(y=0;y vote[x][y] = new int[max_r]; } } int debug=0; for(x=0;x for(y=0;y for(z=0;z try{vote[x][y][z] = 0;} catch(...) {outfile< } } [/code] 每次跑到陣列的某個位置 在執行vote[x][y][z] = 0; 時就會當掉 錯誤訊息 Access violation at address 004064A5 Write of address 00000004 process stopped use step or run to continue 因此我用try ccatch去看了一下跑到哪裡掛掉 發現 當 x y z = (0,104,0) 的時候 就會出現錯誤了 且繼續GO下去就會繼續錯(0,104,1)錯一下 (0,104,2)錯一下 (0,104,3)錯一下 ........一直下去 看錯誤訊息是我去寫了不合法的記憶體 但是我宣告時已經成功宣告 而且 0,104,0 並沒有超出我的宣告範圍阿? 如果說是記憶體不足 應該當初宣告時就會出現錯誤了吧 啥stack overflow的...... 小弟實在是想破頭了~ 拜託各位前輩幫幫忙吧 !!感恩 |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
你要去配新眼鏡
這樣 z 有 max_r 但 y 卻使用了配置 max_r 次而不是 max_b次 同樣 y 有 max_b 但 z 卻使用了配置 max_b 次而不是 max_a次
x < max_x y < max_y z< max_z 這樣命名,不知道對你來說,是否會有障礙? 當然你高興的話,還是可以用 x < max_a y < max_b z< max_r 但 你參數這樣命名,遲早會瘋調 ===================引 用 chang1981 文 章=================== 各位前輩好 小弟最近寫程式需要用到三維陣列, 為了節省記憶體空間打算使用動態配置記憶體方式來宣告 下面是我的程式碼(縮排有點亂抱歉 因為搞不定心情很慌亂) [code cpp] [前面xyz max...參數宣告我就省略了] int ***vote = new int**[max_a]; for(x=0;x [/code] 每次跑到陣列的某個位置 在執行vote[x][y][z] = 0; 時就會當掉 錯誤訊息 Access violation at address 004064A5 Write of address 00000004 process stopped use step or run to continue 因此我用try ccatch去看了一下跑到哪裡掛掉 發現 當 x y z = (0,104,0) 的時候 就會出現錯誤了 且繼續GO下去就會繼續錯(0,104,1)錯一下 (0,104,2)錯一下 (0,104,3)錯一下 ........一直下去 看錯誤訊息是我去寫了不合法的記憶體 但是我宣告時已經成功宣告 而且 0,104,0 並沒有超出我的宣告範圍阿? 如果說是記憶體不足 應該當初宣告時就會出現錯誤了吧 啥stack overflow的...... 小弟實在是想破頭了~ 拜託各位前輩幫幫忙吧 !!感恩 |
chang1981
一般會員 發表:31 回覆:28 積分:11 註冊:2008-09-18 發送簡訊給我 |
感謝大大的回答 真的是我腦袋打結了 照大大的方式修改後已經可以正常宣告並初始化 修改後程式如下 [code cpp] int ***vote = new int**[max_a]; //vote = new int**[max_a]; for(x=0;x vote[x] = new int*[max_b]; for(y=0;y vote[x][y] = new int[max_r]; } } int debug=0; for(x=0;x for(y=0;y for(z=0;z try{vote[x][y][z] = 0;} catch(...) {outfile< } } [/code] 但是現在要釋放記憶體的時候發現了問題 以下是我是放記憶體使用的程式碼 [code cpp] for(x=0;x for(y=0;y delete [] vote[x][y];//此處會出現問題 當vote[5][20]的時候 } delete [] vote[x]; } delete [] vote; [/code] 這樣的程式會在 delete [] vote[x][y]; 時出現錯誤 錯誤訊息 Access violation at address 0119419C in module 'BORLNDMM.DLL' write of address 0000001A' 不知道哪裡出了錯 想麻煩S大幫我看一下好嗎 感謝!!!
編輯記錄
chang1981 重新編輯於 2008-10-07 09:54:21, 註解 無‧
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |