Re: [問題] malloc問題

看板C_and_CPP (C/C++)作者 (做自己)時間16年前 (2009/03/15 21:38), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/6 (看更多)
: ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 220.137.80.95 : → legnaleurc:要再多取一次址 03/15 20:45 : → legnaleurc:alloc_mem( int ** p ); 03/15 20:45 : → peiga:謝謝l大,不過再次請教取二次址的用意何在??謝謝 03/15 20:48 : → windincloud:你要把ptr自己的位置傳到alloc_mem 而不是傳入ptr所指 03/15 20:57 : → windincloud:的位置 03/15 20:57 謝謝2位前輩的熱心指導,不過小弟還是不能意會 我所知,malloc(size_t)是程式向作業系統要求一定大小的記憶體空間作配置 所以malloc()的回傳值是一個point,而這個point會指向我們向作業系統要求 的記憶體空間的位址 一般用法像是 int main() { int *p; p = (int *)malloc(sizeof(int)); //向作業系統要一個int大小的空間 *p = 1; // p的值存放的是剛才呼叫malloc()的回傳值 // p的位址是程式執行時,作業系統給定的 return 0; } 套用推文前輩說的是要把ptr的位置傳到alloc_mem()裡 而不是傳ptr所指向的位址,小弟列出程式碼如下(如有錯誤請糾正) 但小弟不懂的是為何要這麼做及先前的程式無法這麼做呢? void alloc_mem(int *p) { //換個方法寫 int *tmp = (int *)malloc(sizeof(int)); //tmp指向剛才向OS要的記憶空間位址 p = tmp; //main ptr本身的位址=tmp?? //那我使用ptr會指向?? *ptr = ??? } int main() { int *ptr; alloc_mem(ptr); /*...*/ } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.80.95

03/15 21:41, , 1F
You'll get a compile error
03/15 21:41, 1F
謝謝E大指正,已修改 ※ 編輯: peiga 來自: 220.137.80.95 (03/15 21:47)

03/15 21:57, , 2F
Try to treat int *ptr as (int *) ptr. You'll get it
03/15 21:57, 2F

03/15 22:16, , 3F
關鍵在於alloc_mem(ptr);你覺得傳過去的會是什麼呢??
03/15 22:16, 3F
文章代碼(AID): #19lGJmfY (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
6
完整討論串 (本文為第 2 之 6 篇):
2
3
1
6
文章代碼(AID): #19lGJmfY (C_and_CPP)