GetMemory问题!?!?!??

回答下面的问题(1).VoidGetMemory(char**p,intnum){*p=(char*)malloc(num);}voidTest(void){char*s... 回答下面的问题
(1).Void GetMemory(char **p, int num){
*p = (char *)malloc(num);
}
void Test(void){
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
}
}
(3). char *GetMemory(void){
char p[] = "hello world";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?
展开
 我来答
应用之美
2008-08-31 · TA获得超过2513个赞
知道小有建树答主
回答量:453
采纳率:0%
帮助的人:378万
展开全部
1、程序崩溃。
因为 GetMemory 并不能传递动态内存, Test 函数中的 str 一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。
2、篡改动态内存区的内容,后果难以预料,非常危险。 因为 free(str);之后,str 成为野指针, if(str != NULL)语句不起作用。
3、可能是乱码。
因为 GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式