经典的笔试题
1.
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
int main()
{
Test();
return o;
}
返回栈空间地址的问题,此函数会崩溃报错,先进入Test函数,创建了一个char*的空指针,之后进入GetMemory函数,开辟了100个字节大小,使用p指针(形式参数)来接收这块空间的首地址,但是在函数内部创建的变量会在出函数时被销毁,没办法找到这块内存来释放,所以内存泄露一定存在。其次,str本来为空,p的改变不会引起str的改变,此时str依然为空,调用strcpy程序崩溃。
正确代码
void GetMemory(char **p