看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 想請問如果在某個函數內宣告一個指標,指向因malloc所產生的空間 當我要將空間的位置回傳時,是直接回傳這個指標 但是指標是在函數裡宣告的,那這樣這個指標一旦回傳就會消失 那這樣不就沒有指標指向那個空間,這樣的話為甚麼還是可以知道malloc空間的位置呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.166.162
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)
james732:http://ideone.com/CIT72f 這兩種是完全不一樣的 03/11 01:20
※ 編輯: lueichun 來自: 111.251.166.162 (03/11 01:25)
james732:http://ideone.com/0KjI2T 這兩種倒是很類似 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:http://tinyurl.com/bqokf52 03/11 13:37
kdjf:return的東西是暫存器裡的一個數字,caller要主動把它放到自己 03/11 13:40
kdjf:的空間裡 03/11 13:40