看板 C_and_CPP 關於我們 聯絡資訊
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
james732:要寫成 http://ideone.com/bjvrfS 11/19 20:19
james732:跟 http://ideone.com/dpasoO 印出來不是b的原因一樣 11/19 20:20
EdisonX:#1EMIxS0J (C_and_CPP) 11/19 20:37
leiyan:reference是指*&a嗎 11/19 20:40
nikeasyanzi:reference 是指 & 11/21 13:58
nikeasyanzi:感謝樓上幾位版友回文!! 小弟懂了! Orz 11/21 13:58
a9310139:第五誡吧! 11/25 03:14