一、
void GetMemory(char *p)
{
p = (char*)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str,"Hello,World");
printf("%s",str);
}
请问运行Test有什么样的结果?
答:在函数内部修改形参并不能真正改变形参的值,执行完char *str = NULL; GetMemory(str);之后,str仍指向NULL。
二、
char* GetMemory(void)
{
char p[] = "Hello,World";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf("%s",str);
}
请问运行Test有什么样的结果?答:可能是乱码。执行char p[] = "Hello,World";return p;的p[]数组是局部变量,在函数返回后,内存已经释放掉。这是程序员经常犯的错误,在于程序员不理解变量的生存周期。
三、
char* GetMemory(char **p,int num)
{
p = (char*)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str,100);
strcpy(str,"Hello,World");
printf("%s",str);
}
请问运行Test有什么样的结果?答:1、能够运行处Helolo,World.2、没有对malloc的内存进行释放。3、在申请内存之后没有判断申请内存是否成功。if(NULL == p)
exit(1);