[問題] delete [] 陣列出問題

看板C_and_CPP (C/C++)作者 (肥子民)時間15年前 (2011/05/18 14:54), 編輯推噓2(2026)
留言28則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) BCB 2010 ( Embarcadero RAD Studio 2010 ) 最近在寫一個程式 遇到兩個問題 所以上來請教各位高手 問題1. 在 delete [] 我動態定義的陣列 出現錯誤 //////////////////////////////////////////////////////////////////////////code void fun(int h,int w) { //new bool **mark; mark = new bool*[h] for(int y=0;y<h;++y) { mark[y] = new bool[w]; for(int x=0;x<w;++x) mark[y][x] = false; } //對 mark 做一些讀取和給值 //del for(int y=0;y<h;++y) delete [] mark[y]; delete [] mark; mark = NULL; } //code 結束 h跟w是我從圖片上抓來的寬跟高 // h = 300 , w = 200 我有去檢查 h 跟 w 都是大於0的數 new 的話沒問題 , 但是 在 delete [] 的時候就會出錯 如果把 delete [] 的地方拿掉是可以正常執行的 我也有用 Debug 模式去看 delete [] 都當在 y = 53 的時候 不知道為什麼!? 同樣的專案 換一台電腦跑也是會當掉 ,重開機也無效 不知道各位大大知不知道這是什麼問題?__? 問題2. int a = 100; int *b = new int[a]; int *c = new int[a]; //del delete [] b,c; 請問 delete [] 可不可把 b , c 寫在一起? 還是要分開寫 delete [] b; delete [] c; 謝謝各位大大 我苦惱了很久~"~ -- !!!!▁▁▁▁ ▁▁▁▁ 尬 ▕ ⊙ ⊙ ▏老婆對不起啦 ▕ = = ▏拎去 ▕▼▼▼▼▏小的下次不敢 ▕▼▼▼▼▏鄒跪 ▕▲▲▲▲▏再亂寫文章了 ▕▲▲▲▲▏罵主 /██╯ 請老婆原諒! m@(。人。)> 機 xicco || ──╯ / \ ─╯ 板 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.127.179

05/18 14:59, , 1F
mark[y][x] = false; 這行應該有錯吧
05/18 14:59, 1F

05/18 15:01, , 2F
是不是 heap 堆積損毀?
05/18 15:01, 2F

05/18 15:04, , 3F
第二個問題是分開寫,他不是變數宣告,沒那麼聰明
05/18 15:04, 3F

05/18 15:24, , 4F
錯誤訊息事address的問題耶!? 但是我找不出來~"~
05/18 15:24, 4F

05/18 15:24, , 5F
1F大大 我出錯的問題是在delete [] 我猜那邊應該沒錯
05/18 15:24, 5F

05/18 15:25, , 6F
對了...我把一樣的code拿到DEV C事可以正常跑的= ="
05/18 15:25, 6F

05/18 15:29, , 7F
我懷疑是你中間的「//對 mark 做一些讀取和給值」有越界
05/18 15:29, 7F

05/18 15:39, , 8F
如果越界了應該會有錯誤訊息吧!? 我檢查看看
05/18 15:39, 8F

05/18 15:42, , 9F
把錯誤訊息po上來,我幫你debug和看了一段時間,發現都沒
05/18 15:42, 9F

05/18 15:43, , 10F
問題,我猜james732的推測沒錯
05/18 15:43, 10F

05/18 15:52, , 11F
越界通常不會有什麼錯誤訊息的
05/18 15:52, 11F

05/18 15:56, , 12F
http://pastie.org/1920485 像這樣的程式,會死在delete
05/18 15:56, 12F

05/18 15:56, , 13F
而註解掉delete倒可以正常結束 (在我的電腦上是這樣的)
05/18 15:56, 13F

05/18 15:57, , 14F
在2008下正常執行 = =
05/18 15:57, 14F

05/18 15:59, , 15F
錯誤訊息 http://ppt.cc/Hd7N
05/18 15:59, 15F
我要先謝謝各位大大的幫忙 但是我覺得似乎不是程式碼的問題.... 我原本可以 delete [] 的陣列 現在也發生問題了= =" 是電腦被我寫壞了嗎= ='' 我的fun 讀取跟給值 程式碼大概如下 for(int y=1;y<h-1;++y) for(int x=1;x<w-1;++x) if(mark[y][x]) { //處理 //處理就是找周圍八鄰居做處理 for(int yy=-1;yy<=1;++yy) //8鄰居 for(int xx=-1;xx<=1;++xx) //8鄰居 if( yy!=0 || xx!=0 )//中間不要 if(mark[y+yy][x+xx]) { //.... } } 再次感謝各位 ※ 編輯: cooljony0109 來自: 163.13.127.179 (05/18 16:05)

05/18 16:00, , 16F
越界當下好像都不會出現什麼問題,問題都出現在越界過後
05/18 16:00, 16F

05/18 16:01, , 17F
我用g++,通常越界會有訊息,但是都不容易看懂.
05/18 16:01, 17F

05/18 16:03, , 18F
g++會有訊息嗎?我都只看到segmentation fault XD
05/18 16:03, 18F

05/18 16:08, , 19F
「是電腦被我寫壞了嗎= =''」←我還沒聽過這種事情 XD
05/18 16:08, 19F

05/18 16:09, , 20F
我會建議:利用置底文網址,把你的程式碼完整的貼上來
05/18 16:09, 20F

05/18 16:11, , 21F
讓板友可以執行你的程式,才容易判斷問題
05/18 16:11, 21F

05/18 16:16, , 22F
segmentation fault是個訊息,我最近開始使用valgrind去
05/18 16:16, 22F

05/18 16:17, , 23F
檢查.
05/18 16:17, 23F

05/18 17:12, , 24F
程式碼不太方便貼耶~"~ 真是對不起
05/18 17:12, 24F

05/18 17:12, , 25F
我會朝邊界這個地方去debug的 謝謝各位
05/18 17:12, 25F

05/18 17:14, , 26F
那就只能祝你好運囉,加油
05/18 17:14, 26F

05/18 19:54, , 27F
下載 AppVerifier 然後開啟 heap 的檢查吧
05/18 19:54, 27F

05/18 19:55, , 28F
如果是 heap corruption ,就會在第一時間 crash
05/18 19:55, 28F
文章代碼(AID): #1DqsqPZX (C_and_CPP)
文章代碼(AID): #1DqsqPZX (C_and_CPP)