看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): int* a; a=func(); int* func() { int* b = new int(); return b; } 請問大家這樣會有問題嗎?? 我知道若是以下這樣會有問題... 但有點搞不清楚為何 印象中雖然是call by address 但又有點像是call by value把pointer a的內容複製給b 然後b在new空間 所以最後好像a不會真的有新的空間 但又有點不確定是不是這樣... int* a; func2(a); void func2(int* b) { b=new int(); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.34.164
BETNPP:兩個都OK啊 new的東西要自己delete掉 12/03 00:14
BETNPP:func 中的b本身生命週期只到fun結束 但指向的位置並不會 12/03 00:16
purincess:func2這樣就memory leak啦~ 12/03 00:51
BETNPP:如果他在呼叫func2(a)後 delete a 就不會啦 12/03 01:23
freesamael:...func2改不到a阿 12/03 02:11
Wush978:這應該是pass by value吧, 所以你delete a 更糟 12/03 02:12
freesamael:delete a大概會看到segmentation fault吧 12/03 02:12
freesamael:pointer其實也只是一個整數而已,所以b=...改不到a的 12/03 02:13
Wush978:請見13誡第13點 12/03 02:14
tropical72:#1EMIxS0J 例子有點不同,不過這篇看懂就沒問題了. 12/03 05:05
hilorrk:不要用call by address會比較清楚 一切call by value 12/03 05:38
monkey12:所以是兩個都不OK囉?~ 有點看不懂 QQ 12/03 15:36
loveme00835:http://codepad.org/YJGXDVr5 等你學完 template 再來 12/03 16:38
loveme00835:看這段程式應該會更有感覺, 在C++中儘量以物件的方式 12/03 16:38
loveme00835:思考, shared_ptr 等等, 連啥 delete 都看不到, 會簡 12/03 16:39
loveme00835:單很多, 光煩惱這些瑣碎的東西你程式都不用寫了 12/03 16:39
loveme00835:你原本的程式碼用 gcc 編下 option -Werror 就會告訴 12/03 16:41
loveme00835:你原因 12/03 16:41
johnhmj:作業系統對此表示「有借有還,再借不難」(∩_∩) 12/03 17:55