→ fragileness:你malloc的動作不要包在function裡 直接在外面試試看 10/02 00:09
推 QQ29:此p非str 你p malloc跳出副程式 就沒人管的到了 leak.... 10/02 00:09
→ QQ29:str 實際上還是null 10/02 00:10
→ QQ29:你可以傳進去寫char *&p去接 就ok 10/02 00:10
→ QQ29:你寫純C 那就用str=getMemory() 把new的那塊return回來 10/02 00:11
推 VictorTom:這也是一個典型的call by value的問題....@_@" 10/02 00:11
→ softwind:getMemory(char** p /*...*/ *p = malloc(...) 10/02 00:12
→ QQ29:用s大的方式要傳&str進去 記得改 10/02 00:13
→ softwind:沒關係啦 不改會有error message, OK的 10/02 00:15
→ james732:這個問題我以前也想不通 比單純的call by value難一點 10/02 00:22
→ QQ29:說這是call by value是因為傳的是 記憶體位址這個值嘛 10/02 00:24
→ bayes:我一直以為以 malloc() 取得的記憶體要用 free() 才會釋放 10/02 00:54
→ bayes:所以跳出副程式後應該還是存在,而且被 str 指到 10/02 00:55
→ james732:樓上說的沒錯啊 這樣的寫法並沒有釋放 10/02 00:55
→ softwind:我也是這樣以為阿~ 我錯了嗎??? google中... 10/02 00:56
→ bayes:這麼一來 str 不就等於 p 10/02 00:56
→ bayes:是我觀念錯了嗎? 10/02 00:57
→ QQ29:你一開始的觀念 str等於p 這是錯的 10/02 01:01
→ QQ29:int *p1=new int; int*p2; p2=p1; p2=new int;你覺得p1會 10/02 01:02
→ QQ29:跟著new一塊新的記憶體嘛? 顯然不會 這就類似你現在寫的 10/02 01:02
→ QQ29:p1是str p2是你所寫的p p去new 不代表str也跟著new了 10/02 01:03
→ fragileness:的確沒有被釋放 只是從頭到尾沒有被str指到 10/02 01:15
→ larryho:那這樣可以在main裡free嗎? 10/02 09:20
→ james732:可以 10/02 12:06