执行完fun后为什么a没有被置为NULL?
void fun(int* p)
{
cout<< "Fun:p=" << p <<endl;
cout<< "Fun:&p=" << &p <<endl;
delete p;
p = NULL;
}
int main()
{
int *a = new int(3);
fun(a);
cout<< "main:a=" << a <<endl;
cout << "*a="<<*a<<endl;
return 0;
}
这个问题是c++比较基础的指针问题了
实现方式1:
void fun(int** p)
{
cout<< "Fun:p=" << p <<endl;
cout<< "Fun:*p=" << *p <<endl;
cout<< "Fun:**p=" << **p <<endl;
delete *p;
*p = NULL;
}
int main()
{
int *a = new int(3);
cout<< "main:a=" << a <<endl;
fun(&a);
cout<< "main:a=" << a <<endl;
//这里a已经是NULL了
//cout << "*a="<<*a<<endl;
return 0;
}
实现方式2:
#define fun(p) do{ \
cout<< "Fun:p=" << p <<endl; \
cout<< "Fun:*p=" << *p <<endl; \
delete p; \
p = NULL; \
}while(0)
int main()
{
int *a = new int(3);
cout<< "main:a=" << a <<endl;
fun(a);
cout<< "main:a=" << a <<endl;
//这里a已经是NULL了
//cout << "*a="<<*a<<endl;
return 0;
}
new 出来的空间应该是被delete掉了,p是a的一个拷贝,p=NULL后,a并没有被置为NULL,这个我理解了, 但是我不想在main函数里释放a, 想在fun函数内释放并把释放后的内存置为NULL,该怎么处理?