程序有什么问题
void GetMemory(char *p)
{
p=(char *)malloc(100);
}
void Test(void)
{
char *str=NULL;
GetMemory(str);
strcpy(str,"hello world");
printf(str);
}
答:程序崩溃
因为GetMemory并不能传递动态内存,Test函数中的str一直都是NULL。strcpy(str,”hello world”);将使程序崩溃。
char *GetMemory(void)
{
char p[]="hello world";
return p;
}
void Test(void)
{
char *str=NULL;
str=GetMemory();
printf(str);
}
答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原先的内容已经被清除,新内容不可知
void Test(void)
{
char *str=(char *)malloc(100);
strcpy(str,"hello");
free(str);
if(str!=NULL)
{
strcpy(str,"world");
printf(str);
}
}
答:篡改动态内存区的内容,后果难以预料,非常危险
因为free(str)之后,str成为野指针,if(str!=NULL)不起作用。