看板 C_and_CPP 關於我們 聯絡資訊
: ※ 發信站: 批踢踢實業坊(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
Ebergies:You'll get a compile error 03/15 21:41
謝謝E大指正,已修改 ※ 編輯: peiga 來自: 220.137.80.95 (03/15 21:47)
Ebergies:Try to treat int *ptr as (int *) ptr. You'll get it 03/15 21:57
Cloud:關鍵在於alloc_mem(ptr);你覺得傳過去的會是什麼呢?? 03/15 22:16