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

报告相同问题?

悬赏问题

  • ¥15 蓝桥oj3931,请问我错在哪里
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染