作者kkroy (☆㊣↖煞氣ㄟ阿喂↘ξ★)
看板C_and_CPP
標題[問題] 請問關於十二戒中的 new 和 delete
時間Sat Jul 24 11:04:27 2010
請問如果在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