请教内存的思考题
今天看高质量C、C++ 看见一个内存的思考题 有些不理解 请教各位
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
程序崩溃。这个还可以理解,因为将指针str的传给p 但是值传递所以Test函数中的str值一直为NULL;
疑问一: 但是形参用指向指针的指针就可以,如下 这和上面有什么不同之处么
void GetMemory(char **p, int num) //形参用指向指针的指针**p
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
疑问二: 对于下面的一个例子,虽然可以输出hello 但是由于没有释放malloc申请的空间,造成内存泄露,这怎么解决?
[解决办法]
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
p在函数体里其实是一个副本_p,p = (char *)malloc(100)只是为_p分配了空间,而p没有。
void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
副本_p是char **的,_P和p指向的地方相同,所以为*_P分配空间也是为*分配空间,也就是char*
[解决办法]