内存泄露的问题
void GetMemoryA(char *p)
{
p = (char *)malloc(100);
}
void TestA(void)
{
char *str = NULL;
GetMemoryA(str);
strcpy(str, "TestA");
printf("%s\n",str);
}
这段代码会内存泄露
void GetMemoryC(char **p, int num)
{
*p = (char *)malloc(num);
}
void TestC(void)
{
char *str = NULL;
GetMemoryC(&str, 100);
strcpy(str, "TestC");
printf("%s\n",str);
}
这段代码不会内存泄露
小弟新手,哪位大哥给个答案 谢了
[解决办法]
void GetMemoryA(char *p)
{
p = (char *)malloc(100);
}
char *str = NULL;
GetMemoryA(str);
内存分配给了临时指针char* p,char* str依然=NULL。
指针的值按值传递,这样的操作只修改了函数中的临时变量。
想通过传递参数修改指针的指向,需要用指针的引用或者指针的指针做为参数。
细致的找本书看吧。
[解决办法]
两段代码都有内存泄露,malloc了没有free
而
void TestA(void)
{
char *str = NULL;
GetMemoryA(str); //str依然是NULL
strcpy(str, "TestA"); //修改非法地址
printf("%s\n",str);
}
[解决办法]
void GetMemoryA(char *p)
{
p = (char *)malloc(100);
}
关键是malloc函数返回的是一个指针,然而GetMemoryA函数形参是指针,相当于值按值传递,没有修改形参的值;
如果malloc返回的不是指针即地址,是个普通的值,那么形参的值就可以被指针所修改;
但事实malloc函数返回的指针即地址,char* str依然=NULL