barry_di 2017-12-04 09:16 采纳率: 100%
浏览 793
已结题

fun函数内delete p后,main里面a为什么没有置为NULL

执行完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;

}

  • 写回答

2条回答 默认 最新

  • xiaozhuai7 2017-12-04 10:23
    关注

    这个问题是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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?