看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《WGL (飛揚寒星)》之銘言: 關於 delete [] 的問題,曾有同學提出:如果指針不再指向原來的位置,那麼 delete[]會有何效果? --
adrianshum:結果應該和實作有關. 有的實作會expect number of 01/12 10:29
adrianshum:elements 放在 pointer 前. 也許就是這樣, 它把在 01/12 10:30
adrianshum:allocated array 以後的一小部份也當成是要 deallocate 01/12 10:30
adrianshum:, 因為裡面會是 garbage, 所以那個 "count" 才會出現奇 01/12 10:31
adrianshum:怪的東西. 01/12 10:31
adrianshum:看回你的例子看來就是這樣, ptr 前剛好就是 element 10 01/12 10:33
adrianshum:裡面很可能就是 "10" 這個值 放在最後, 即是當 delete 01/12 10:34
adrianshum:時, 往回找一個 int 的話, 會找到 10, 所以當成要 01/12 10:34
adrianshum:deallocate 10 個 element, 即是多d eallocate 一個的 01/12 10:35
adrianshum:長度, 就是那個奇怪 count 的那個, 要是你 +=15 的話大 01/12 10:35
adrianshum:概會看到 6 次古怪的 destructor (如果你幸運沒有 01/12 10:35
adrianshum:runtime error 的話) 01/12 10:36
感謝大大的解答!看來應該正如您所說的沒錯,只是如果+=15的話,實際上會出現9個 因為15前面那個是14,所以會delete 15、16、17、18、19、?、?、?、?、?、? 、?、?、?共九個?=garbage XD 不過想請問一下您說的“實作”的意思?是指IDE嗎?我是用Dev C++ = = -- 我寧以頃刻短暫的繁華,換取千年無盡的落寞。 歡迎大家上我的“部落格”:http://coldstar.5d6d.com/forum-2-1.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.241.120
LPH66:應該指的是 Runtime library 的實作 01/12 11:17
adrianshum:我耍笨了 XD 簡單加數也算錯了 :P 01/12 14:19
adrianshum:總而言之, 不是 new 出來的東西就不要 delete 01/12 14:20