[問題] pointer相關問題

看板C_and_CPP作者 (猴仔)時間14年前 (2011/12/03 00:04), 編輯推噓6(6013)
留言19則, 9人參與, 最新討論串1/1
開發平台(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

12/03 00:14, , 1F
兩個都OK啊 new的東西要自己delete掉
12/03 00:14, 1F

12/03 00:16, , 2F
func 中的b本身生命週期只到fun結束 但指向的位置並不會
12/03 00:16, 2F

12/03 00:51, , 3F
func2這樣就memory leak啦~
12/03 00:51, 3F

12/03 01:23, , 4F
如果他在呼叫func2(a)後 delete a 就不會啦
12/03 01:23, 4F

12/03 02:11, , 5F
...func2改不到a阿
12/03 02:11, 5F

12/03 02:12, , 6F
這應該是pass by value吧, 所以你delete a 更糟
12/03 02:12, 6F

12/03 02:12, , 7F
delete a大概會看到segmentation fault吧
12/03 02:12, 7F

12/03 02:13, , 8F
pointer其實也只是一個整數而已,所以b=...改不到a的
12/03 02:13, 8F

12/03 02:14, , 9F
請見13誡第13點
12/03 02:14, 9F

12/03 05:05, , 10F
#1EMIxS0J 例子有點不同,不過這篇看懂就沒問題了.
12/03 05:05, 10F

12/03 05:38, , 11F
不要用call by address會比較清楚 一切call by value
12/03 05:38, 11F

12/03 15:36, , 12F
所以是兩個都不OK囉?~ 有點看不懂 QQ
12/03 15:36, 12F

12/03 16:38, , 13F
http://codepad.org/YJGXDVr5 等你學完 template 再來
12/03 16:38, 13F

12/03 16:38, , 14F
看這段程式應該會更有感覺, 在C++中儘量以物件的方式
12/03 16:38, 14F

12/03 16:39, , 15F
思考, shared_ptr 等等, 連啥 delete 都看不到, 會簡
12/03 16:39, 15F

12/03 16:39, , 16F
單很多, 光煩惱這些瑣碎的東西你程式都不用寫了
12/03 16:39, 16F

12/03 16:41, , 17F
你原本的程式碼用 gcc 編下 option -Werror 就會告訴
12/03 16:41, 17F

12/03 16:41, , 18F
你原因
12/03 16:41, 18F

12/03 17:55, , 19F
作業系統對此表示「有借有還,再借不難」(∩_∩)
12/03 17:55, 19F
文章代碼(AID): #1EsFSGQ4 (C_and_CPP)