Re: [問題] Dynamic Memory Allocation

看板C_and_CPP作者 (飛揚寒星)時間16年前 (2010/01/12 11:11), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《WGL (飛揚寒星)》之銘言: 關於 delete [] 的問題,曾有同學提出:如果指針不再指向原來的位置,那麼 delete[]會有何效果? --

01/12 10:29,
結果應該和實作有關. 有的實作會expect number of
01/12 10:29

01/12 10:30,
elements 放在 pointer 前. 也許就是這樣, 它把在
01/12 10:30

01/12 10:30,
allocated array 以後的一小部份也當成是要 deallocate
01/12 10:30

01/12 10:31,
, 因為裡面會是 garbage, 所以那個 "count" 才會出現奇
01/12 10:31

01/12 10:31,
怪的東西.
01/12 10:31

01/12 10:33,
看回你的例子看來就是這樣, ptr 前剛好就是 element 10
01/12 10:33

01/12 10:34,
裡面很可能就是 "10" 這個值 放在最後, 即是當 delete
01/12 10:34

01/12 10:34,
時, 往回找一個 int 的話, 會找到 10, 所以當成要
01/12 10:34

01/12 10:35,
deallocate 10 個 element, 即是多d eallocate 一個的
01/12 10:35

01/12 10:35,
長度, 就是那個奇怪 count 的那個, 要是你 +=15 的話大
01/12 10:35

01/12 10:35,
概會看到 6 次古怪的 destructor (如果你幸運沒有
01/12 10:35

01/12 10:36,
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

01/12 11:17, , 1F
應該指的是 Runtime library 的實作
01/12 11:17, 1F

01/12 14:19, , 2F
我耍笨了 XD 簡單加數也算錯了 :P
01/12 14:19, 2F

01/12 14:20, , 3F
總而言之, 不是 new 出來的東西就不要 delete
01/12 14:20, 3F
文章代碼(AID): #1BI-XzNo (C_and_CPP)
文章代碼(AID): #1BI-XzNo (C_and_CPP)