作者peiga (做自己)
看板C_and_CPP
標題Re: [問題] malloc問題
時間Sun Mar 15 21:38:55 2009
:
※ 發信站: 批踢踢實業坊(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
1F:推 Ebergies:You'll get a compile error 03/15 21:41
謝謝E大指正,已修改
※ 編輯: peiga 來自: 220.137.80.95 (03/15 21:47)
2F:推 Ebergies:Try to treat int *ptr as (int *) ptr. You'll get it 03/15 21:57
3F:→ Cloud:關鍵在於alloc_mem(ptr);你覺得傳過去的會是什麼呢?? 03/15 22:16