错误代码展示(一):
void GetMemory(char *p)
{
p = ( char * )malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str , "hello world");
printf(str);
}
试问运行这段代码会有什么样的结果呢?
答:这段代码中Test函数运行会导致程序挂掉崩溃。该代码存在如下问题:
- 对空指针进行解引用:虽然Test函数调用GetMemory函数向内存malloc申请了100个字节大小的空间并且把空间的首地址赋给了P指针,但是由于p指针(形参)是str指针(实参)的一份临时拷贝,所以在返回Test函数时,编译器将P指针销毁了,因此P指针中的地址也会被销毁,因此 str指针仍然是一个NULL(空指针),strcpy函数和printf函数在访问str时,等于是对空指针进行了解引用操作,所以不合法。
- 导致内存泄漏:动态内存函数开辟的内存空间没有被释放掉。