类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
void GetMem1(char* p)
{
p=(char*)malloc(100);
}
void GetMem2(char **p,int num)
{
*p=(char*)malloc(num);
}
为什么第一种不对,第二中对那?
网友回答:
首先,楼主你忘了free了
其次,在第一个函数中,p是得到了分配空间的地址,但是它却没有修改main中的str1的值。因为str1是一个指针,它其实是一个int型。而在GetMem1中,形参p只是这个int型的副本,修改了p的值却没能够修改str1的值。
由于形参的传递是值拷贝的过程,是在被调用函数的栈空间建立一份形参的拷贝,所以为了使用被调用函数对形参的操作被传回调用函数,所以应将形参的地址传给被调函数,即使用指针作为函数参数。
楼主的代码是想把对指针的修改传递给调用函数,因此要把指针的地址传给被调函数,所以需要使用指针的地址作为函数参数,即使用二级指针传递。
To all:
void GetMem1(char* p)
{
p=(char*)malloc(100);
}
void GetMem2(char **p,int num)
{
*p=(char*)malloc(num);
}
第一个函数,是有内存泄露的问题
问题是第二个函数,为什么没有 delete *str2 也能执行呢?在vc 6。0
UP