指针的值传递和变量的值传递一样,当参数是指针的时候,在函数内部只是对指针修改,那是没有意义的。
下面看一个例子:
void GetInt(int *pInt)
{
pInt = new int;
}
void FreeInt(int *pInt)
{
if(pInt)
delete pInt;
}
int main()
{
int *p1 = NULL;
GetInt(p1);
FreeInt(p1);
return 0;
}
上面的程序你能看出问题所在吗?
===============================================华丽的分界线======================================
以上的代码只会导致内存泄漏,究其原因类似于变量的值传递。
int a = 3;
int b = a;
b = 7; //这样修改当然对a没有影响
解决办法:
1、指向指针的指针。
2、指针的引用
void GetInt(int **pInt)
{
*pInt = new int;
}
void GetInt(int *&pInt)
{
pInt = new int;
}