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 操作很危险 展开
#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 操作很危险 展开
1个回答
展开全部
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;
}
// 但依据谁申请谁释放的原则,上述写法依然不太好。
{
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往哪放??
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询