为什么这个函数不能传递动态内存?

liangchaoxi 2012-09-03 04:21:09
void GetMemory(char *p)
{
p= (char *)malloc(100);
}
void Test(void)
{
char
*str = NULL;
GetMemory(str);
strcpy(str,
"hello world");
printf(str);
}

请问运行Test函数会有什么样的结果?
答:程序崩溃。
因为GetMemory并不能传递动态内存,
Test函数中的 str一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。

GetMemory为什么不能传递动态内存?p= (char *)malloc(100); 不可以这样把申请的内存的指针赋给传进来的参数str 并通过str 带出去?
...全文
126 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeyumin89 2012-09-03
  • 打赏
  • 举报
回复
传值进取,实际上你是传的str内保存的地址,也就是0,p指向新内存,但是此时str还是0,GetMemory函数完了,函数内变量作用域就消失了,所以GetMemory()之后,str实际还是为0。
你可以传str的地址给GetMemory()或者引用,也可以用str接收GetMemory()返回新内存的地址。
rickys2080 2012-09-03
  • 打赏
  • 举报
回复
改成:

void GetMemory(char **p)//改了
{
*p= (char *)malloc(100);//改了
}
void Test(void)
{
char
*str = NULL;
GetMemory(&str); //改了
strcpy(str, "hello world");
printf(str);
}

即可。
mujiok2003 2012-09-03
  • 打赏
  • 举报
回复

void GetMemory(char *p) //(2) p->NULL, p和str值相同
{
p= (char *)malloc(100); //(3)p指向新空间了,str未变

}

char *str = NULL; //(1) str->NULL
GetMemory(str);
//(4) str没有变,还是NULL
baichi4141 2012-09-03
  • 打赏
  • 举报
回复
GetMemory(str);
void GetMemory(char *p)
这两行语句使得在进入函数时,将str的值复制给p
没听说过退出函数时,p的值会再复制给str
bandaoyu 2012-09-03
  • 打赏
  • 举报
回复
void GetMemory(char *p)
{
p= (char *)malloc(100);
}
这个是值传递,你只要搞清楚值传递和地址传递就懂了

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧