作者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