C语言问题。不理解最后的答案。

#include<stdio.h>#include<stdlib.h>voidgetmemory(char*p){p=(char*)malloc(100);strcpy(... #include <stdio.h>
#include <stdlib.h>
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s/n",str);
free(str); return 0;
}
答案:程序崩溃,getmemory 中的 malloc 不能返回动态内存, free()对 str 操作很危险
展开
 我来答
王者不农药
推荐于2016-12-01 · TA获得超过144个赞
知道小有建树答主
回答量:228
采纳率:50%
帮助的人:111万
展开全部
int main( )
{
char *str=NULL;
getmemory(str); // 等同于getmemory( NULL )
printf("%s/n",str);
free(str); // 等同于free(NULL)
return 0;
}
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
} // p 开辟后未释放会内存泄漏
程序可以改写如下:
#include <stdio.h>
#include <stdlib.h>
char* getmemory()
{
char* p=(char *) malloc(100);
strcpy(p,"hello world");
return p;
}
int main( )
{
char *str=NULL;
str = getmemory();
printf("%s/n",str);
free(str);
return 0;
}
// 但依据谁申请谁释放的原则,上述写法依然不太好。
追问
就是说主要问题是str指向NULL,所以不可以当做实参传递给函数是么?
不申请不可以么?
追答
不申请内存的话,strcpy这个hello world往哪放??
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式