看板 C_and_CPP 關於我們 聯絡資訊
請問如果在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
chrisdar:所以他才是戒律阿 07/24 11:19
nowar100:用delete[] 不過我忘記你問的那個問題做法了 帶強者補完 07/24 11:54
nowar100:印象中是memory layout會記錄array的size 呼叫delete[]會 07/24 11:57
nowar100:幫你呼叫分別的delete在各個元素上 07/24 11:58
justdemon:常見的做法據說是在 ptr 指到的前4or8個byte做紀錄 07/24 12:02
tinlans:通常兩種都能正確釋放空間,但用錯的話物件無法正常解構。 07/24 12:45
loveme00835:樓上正解 07/24 13:25