看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC6.0 程式碼(Code):(請善用置底文網頁, 記得排版) int size = 10; double **pp; pp = new double *[size]; for(int i = 0; i < size; i++) { pp[i] = new double [size]; for(int j = 0; j < size; j++) { pp[i][j] = i*j; } } 問題: 在上面的程式 我用動態記憶體 產生了2維陣列 有借有還 所以我必須使用 delete來還 因為new的是[] 所以理當用 delete []來歸還記憶體 可好了 該怎麼還? 1維的 大可直接 delete []p 就釋放了 如今2維的pp 如果依照邏輯上來說 應該是要 for(i = 0; i < size; i++) { delete []pp[i]; } delete []pp; 感覺非常合理 是嗎? 但是書上的教學是 for(i = 0; i < size; i++) { delete pp[i]; } delete pp; 而且以上兩者都可以在VC6.0裡面順利跑完 當然不知道實際上是否真的釋放了記憶體 可是pp不就是指了一個陣列,陣列的每一格又是指標 等著指向目標 但不論陣列的內容是值或指標 他就是一個陣列 不是嗎? 所以至少 最後一個delete 不就是要 delete []pp嗎? 又如果最後一個是delete []pp了 那for裡面的 就應該不是單純的 delete pp[i]了吧? 因為pp[i] 他們也是一個指向陣列的指標 不知道是我概念垮光了 還是怎麼樣...希望板友給我一些幫助 萬分感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.2.53 ※ 編輯: liwmewmew 來自: 218.164.2.53 (10/11 01:31)
littleshan:書寫錯了,丟掉它換一本,順便也把VC6丟掉吧 10/11 01:55
littleshan:VC2010 express 或 gcc 都是免費的編譯器 10/11 01:56
liwmewmew:Orz 所以我本身以為的那個 delede []pp[i]與delede []pp 10/11 02:15
liwmewmew:這樣才是正確的概念阿? 囧 10/11 02:15
diabloevagto:YES 10/11 02:36
liwmewmew:謝謝兩位大大的指導,好在有懷疑書本,而不是硬背 10/11 03:04
liwmewmew:我要燒書+換編譯器了~"~ 10/11 03:04
xatier:盡信書,不如無書 10/11 03:09
tyc5116:藉這標題問一下,像這問題要怎樣檢查有沒有全部釋放呢?? 10/11 07:10
angleevil:valgrind. 10/11 08:56
diabloevagto:那個不支援windows...請問windows有沒有類似的軟體? 10/12 08:41
angleevil:孩子,這個問題要問藍光 10/12 09:02
angleevil:打錯一個字,把光改成影 10/12 09:02
tropical72:被點到名了,ide 如果是vs的話,codeproject有份vld好用, 10/12 13:28
tropical72:vld是在開發過程中抓memory leak的,若是包成exe後要抓 10/12 13:28
tropical72:的話,WinDbg 應算首選,LeakDia 也不錯,使用較簡單, 10/12 13:28
tropical72:Umdh.exe"好像"可用,但感覺不適合 http://0rz.tw/sHchJ 10/12 13:28