哪位高手能帮小弟我看看这段代码,编译能通过 运行时异常 用VC的

谁能帮我看看这段代码,编译能通过 运行时错误 用VC的
#include <iostream>
char   *   GetMemory(char   *p,   int   num)
{
p=(char   *)malloc(sizeof(char)*num);
return   p;
}
int   main()
{
        char   *str=NULL;
        GetMemory(str,100);
        strcpy(str, "hello ");
        return   0;
}


------解决方案--------------------
#include <iostream>
char * GetMemory(char **p, int num)
{
p=(char *)malloc(sizeof(char)*num);
return p;
}
int main()
{
char *str=NULL;
GetMemory(&str,100);
strcpy(str, "hello ");
return 0;
}
------解决方案--------------------
上面两个人都说了,使用返回值,或者将形参改为引用,或者使用址传递方法

------解决方案--------------------
但是上面的程序都没有注意free内存。有内存泄漏
------解决方案--------------------
内存泄漏要从程序整体角度考虑,有时候一个函数内可以使得malloc和free不匹配,只要这样的函数对在外面匹配就可以了吧