[問題] 請問關於十二戒中的 new 和 delete

看板C_and_CPP (C/C++)作者 (☆㊣↖煞氣ㄟ阿喂↘ξ★)時間15年前 (2010/07/24 11:04), 編輯推噓4(403)
留言7則, 5人參與, 最新討論串1/1
請問如果在function內new一個array最後回傳指標給caller接,例如: int* foo(int num){ int* ptr = new int [num]; /// ..... some operation ....///// return ptr; } int main(){ int* ptr = foo(10); ///// ...some operation.... /// delete [] ptr; ←請教這行 return 0; } 我的問題是,在caller接住foo()傳回的pointer後,最後它要釋放記憶體, 那是要執行delete 還是delete []呢? 我覺得應該是delete []; 可是在main()中它只知道有一個local pointer int*接住function傳回來的pointer, 它怎麼知道當執行 delete[]時,要釋放多少格當初向OS要來的空間呢? 那如果是執行 delete,那感覺剩下沒delete到的會產生memory leak.... 先謝謝大家了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.139.7

07/24 11:19, , 1F
所以他才是戒律阿
07/24 11:19, 1F

07/24 11:54, , 2F
用delete[] 不過我忘記你問的那個問題做法了 帶強者補完
07/24 11:54, 2F

07/24 11:57, , 3F
印象中是memory layout會記錄array的size 呼叫delete[]會
07/24 11:57, 3F

07/24 11:58, , 4F
幫你呼叫分別的delete在各個元素上
07/24 11:58, 4F

07/24 12:02, , 5F
常見的做法據說是在 ptr 指到的前4or8個byte做紀錄
07/24 12:02, 5F

07/24 12:45, , 6F
通常兩種都能正確釋放空間,但用錯的話物件無法正常解構。
07/24 12:45, 6F

07/24 13:25, , 7F
樓上正解
07/24 13:25, 7F
文章代碼(AID): #1CIbW-Pu (C_and_CPP)
文章代碼(AID): #1CIbW-Pu (C_and_CPP)