推 suhorng:為什麼回傳會消失?回傳的話不就把位址傳回來了? 03/11 00:46
→ RouterHsieh:malloc是透過system call跟OS要一塊記憶體, 03/11 01:07
→ RouterHsieh:要到之後就把指向該記憶體的位置回傳,怎會消失..XD 03/11 01:07
我的意思是函數內的指標是local variable,指向malloc空間,
然後在函數內,為了回傳malloc空間位置,所以return這個local variable,
return的動作做完了,
作為local variable的指標才消失,而這時位置已經傳回來了,
所以一定可以使用該位置??
※ 編輯: lueichun 來自: 111.251.166.162 (03/11 01:19)
→ james732:指標本身並不會消失,而是指標指的那個空間可能會無效 03/11 01:19
指標是在函數內宣告的,所以函數結束指標應該會跟著結束並消失的不是嗎
(因為函數是在stack內)??
※ 編輯: lueichun 來自: 111.251.166.162 (03/11 01:22)
※ 編輯: lueichun 來自: 111.251.166.162 (03/11 01:25)
→ linotwo:malloc() 也是回傳指標給你,指標也沒有消失啊。 03/11 03:25
→ linotwo:沒有消失是因為你用一個 local variable 把他記起來了。 03/11 03:25
推 EdisonX: 似乎看懂什麼意思。假設你在 func 裡動作是 int *ptr ; 03/11 12:34
→ EdisonX:ptr = malloc(sizeof(int)*10) ; return ptr; 則, 向系統 03/11 12:35
→ EdisonX:要10個int大小空間,假設是0x80~0xA7,最後ptr存的會是第一 03/11 12:36
→ EdisonX:個位址值,也就是0x80;傳回去時,呼叫端得到0x80,然後sub 03/11 12:37
→ EdisonX:裡之 ptr 確實會消失,但當初向系統要的 0x80~0xA7 還在。 03/11 12:38
→ leiyan:想問個問題喔:malloc(或其相依的程式)是一直在執行嗎? 03/11 13:35
→ kdjf:return的東西是暫存器裡的一個數字,caller要主動把它放到自己 03/11 13:40
→ kdjf:的空間裡 03/11 13:40