用法一
/*str释放后不等于NULL,而是一个不确定的值,形成野指针,执行if语句,打印world*/
#include
#include
int main()
{
char *str = (char*)malloc(100);
strcpy(str, "hello");
free(str);
if (str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
用法二
/*段错误,函数调用值传递*/
#include
#include
void GetMemory(char *p)
{
p = (char*)malloc(100);
}
int main()
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
用法三
/*内存分配成功,打印hello*/
#include
#include
void GetMemory(char **p, int num)
{
*p = (char*)malloc(num);
}
void main()
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
用法四
/*打印乱码,当GetMemory函数返回时,自动变量p就会被释放,str所指向的内容就不确定了*/
#include
#include
char* GetMemory()
{
char p[] = "hello world";
return p;
}
int main()
{
char *str = NULL;
str = GetMemory();
printf(str);
}
阅读(2064) | 评论(0) | 转发(0) |