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

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条)

报告相同问题?

悬赏问题

  • ¥20 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏