[問題] 關於malloc空間位置回傳

看板C_and_CPP作者 (no anonymous)時間11年前 (2013/03/11 00:43), 編輯推噓2(2015)
留言17則, 7人參與, 最新討論串1/1
開發平台(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

03/11 00:46, , 1F
為什麼回傳會消失?回傳的話不就把位址傳回來了?
03/11 00:46, 1F

03/11 01:07, , 2F
malloc是透過system call跟OS要一塊記憶體,
03/11 01:07, 2F

03/11 01:07, , 3F
要到之後就把指向該記憶體的位置回傳,怎會消失..XD
03/11 01:07, 3F
我的意思是函數內的指標是local variable,指向malloc空間, 然後在函數內,為了回傳malloc空間位置,所以return這個local variable, return的動作做完了, 作為local variable的指標才消失,而這時位置已經傳回來了, 所以一定可以使用該位置?? ※ 編輯: lueichun 來自: 111.251.166.162 (03/11 01:19)

03/11 01:19, , 4F
指標本身並不會消失,而是指標指的那個空間可能會無效
03/11 01:19, 4F
指標是在函數內宣告的,所以函數結束指標應該會跟著結束並消失的不是嗎 (因為函數是在stack內)?? ※ 編輯: lueichun 來自: 111.251.166.162 (03/11 01:22)

03/11 01:20, , 5F
http://ideone.com/CIT72f 這兩種是完全不一樣的
03/11 01:20, 5F
※ 編輯: lueichun 來自: 111.251.166.162 (03/11 01:25)

03/11 01:25, , 6F
http://ideone.com/0KjI2T 這兩種倒是很類似
03/11 01:25, 6F

03/11 03:25, , 7F
malloc() 也是回傳指標給你,指標也沒有消失啊。
03/11 03:25, 7F

03/11 03:25, , 8F
沒有消失是因為你用一個 local variable 把他記起來了。
03/11 03:25, 8F

03/11 12:34, , 9F
似乎看懂什麼意思。假設你在 func 裡動作是 int *ptr ;
03/11 12:34, 9F

03/11 12:35, , 10F
ptr = malloc(sizeof(int)*10) ; return ptr; 則, 向系統
03/11 12:35, 10F

03/11 12:36, , 11F
要10個int大小空間,假設是0x80~0xA7,最後ptr存的會是第一
03/11 12:36, 11F

03/11 12:37, , 12F
個位址值,也就是0x80;傳回去時,呼叫端得到0x80,然後sub
03/11 12:37, 12F

03/11 12:38, , 13F
裡之 ptr 確實會消失,但當初向系統要的 0x80~0xA7 還在。
03/11 12:38, 13F

03/11 13:35, , 14F
想問個問題喔:malloc(或其相依的程式)是一直在執行嗎?
03/11 13:35, 14F

03/11 13:37, , 15F

03/11 13:40, , 16F
return的東西是暫存器裡的一個數字,caller要主動把它放到自己
03/11 13:40, 16F

03/11 13:40, , 17F
的空間裡
03/11 13:40, 17F
文章代碼(AID): #1HFBWbWa (C_and_CPP)