首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

内存泄露的有关问题

2012-03-09 
内存泄露的问题void GetMemoryA(char *p){p (char *)malloc(100)}void TestA(void){char *str NULLG

内存泄露的问题
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

热点排行