[問題] 函數return array pointer跟不return

作者: Qoofate (大魯閣_最強打者)   2015-04-30 13:37:59
請大大賜教 兩種寫法:
1.
main()
{
char* buf;
buf=malloc(2048*sizeof(char));
func(buf);
printf(buf); //試印出buf內容 但為空
}
void func(char* buf )
{
buf= SetArray(); // 回傳一個 char * pointer給buf
}
此法不work
2.
main()
{
char* buf;
buf=malloc(2048*sizeof(char));
buf=func(buf);
printf(buf); //試印出buf內容 ok
}
char* func(char* buf )
{
buf= SetArray(); // 回傳一個char * pointer給buf
return buf;
}
第一種不行 但第二種可以
請問我第一種可能是因為哪邊不合規定嗎
或者這樣做法根本是錯誤的
Thank you~
作者: asilzheng (asil)   2015-04-30 13:48:00
第一個 func(&buf); void func(char **buf)*buf = SetArray();你得把原本的 address 傳給 func 才修改得到原值
作者: wenyonba (射後不理很XX啊!!!!)   2015-04-30 13:51:00
看看置底13誡的第13項,應該就懂,因為你傳進去的是指標的複本,不然你就得傳指標的指標進去才行~~
作者: Qoofate (大魯閣_最強打者)   2015-04-30 13:53:00
感謝asilzheng大 , it works!我再思考一下 為何要用雙重指標
作者: Caesar08 (Caesar)   2015-04-30 14:14:00
用void func(char *&buf)
作者: Feis (永遠睡不著 @@)   2015-04-30 15:05:00
實際上兩個都有問題
作者: koka813 (shift)   2015-04-30 18:38:00
要是只有這種資訊,2的寫法也會memory leak

Links booklink

Contact Us: admin [ a t ] ucptt.com