作者nikeasyanzi (nikeasyanzi)
看板C_and_CPP
標題[問題] 指標傳入副函式做malloc 一問
時間Mon Nov 19 19:45:38 2012
int set_val(char *a){
a=(char *)malloc(sizeof(char)*4);
*a='x';
*(a+1)='y';
printf("%s\n",a);
return 0;
}
int main(){
char * a=NULL;
set_val(a);
printf("%s",a);
return 0;
}
各位版友大家好
有個問題想請問各位先進 我使用VC2010
我本來預期兩個printf都會一樣 都是印出xy
1.但上列程式 第一個printf(在set_value裡) 印出xy
但第二個printf 卻是NULL(在mail裡) why??
malloc 的記憶體是放在heap 應該不是被收回去啊! 那怎麼會是NULL
何況我傳指標不就算是call by reference ?
這是新手十戒裡的嗎? 囧
2.另外我知道這樣寫法好像不大好
正確地的作法 是在main()裡就malloc 這樣程式就沒問題
這樣的做法是不是也才能符合 "malloc 和free最好在同一個函式內"的說法?
無論如何 先謝謝大家!!
--
CyberPanel 5000CP 換 NT.500
http://myurl.com.tw/05bd
EmailCash 5000e 換 NT.500
http://myurl.com.tw/rgdq
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.205.201
→ nikeasyanzi:新手十誡 最後一誡? 是嗎?? 囧 11/19 19:49
→ nikeasyanzi:但我看了 最後的圖解 還是不大懂欸! 資質太差>"< 11/19 19:51
→ buganini:傳進去的是沒初始化的char *a的值 11/19 19:55
→ nikeasyanzi:為啥解決方法是用雙重指標 改指標所在的位址? 11/19 19:56
→ buganini:這樣寫要用兩個* 11/19 19:56
→ buganini:這樣傳進去的不是a本身,是a的值,裡面改不到 11/19 19:56
→ buganini:c不能傳reference,所以要傳a的址進去 11/19 19:57
→ ssccg:傳指標不是call by reference,是call by value 11/19 19:58
→ ssccg:那個value是位址,pointer是存位址的變數,不是reference 11/19 19:59
→ leiyan:reference是指*&a嗎 11/19 20:40
→ nikeasyanzi:reference 是指 & 11/21 13:58
→ nikeasyanzi:感謝樓上幾位版友回文!! 小弟懂了! Orz 11/21 13:58
推 a9310139:第五誡吧! 11/25 03:14