我使用new在内存中为我的对象声明了一个指针,在退出的时候我使用如下的代码删除该指针,但是使用debug发现有内存泄漏的问题:
CMyClass* myOne = new CMyClass;
......
......
myOne = NULL;
delete myOne;
后来我把myOne = NULL;注释掉以后,就没有内存泄漏的报告了。
不知道为什么?
我看了其他的一些代码,通常是将myOne = NULL放在delete之后,
如果这样的话,myOne = NULL这一句还会有什么作用呢?

解决方案 »

  1.   

    没有见过这样的用法.myOne = NULL已经改变了内存的地址,delete myOne应该就不起作用了,我是这么认为的,应该就是直接delete myOne就可以了
      

  2.   

    同意楼上的。
    最好还是在delete后 将指针赋值 NULL 。
      

  3.   

    很显然,你对myOne指针重新赋值导致原有的分配(new CMyClass)成为一个迷失指针,系统无法释放迷失指针所以造成内存泄露,应该是
    CMyClass myOne = new CMyClass;
    ...
    if(myOne)
      delete myOne;
    myOne = NULL;
      

  4.   

    你是在堆栈上开的内存,所以可以判断指针是否非空,来决定删除与否,如下:
    if(myOne != NULL)
    {
    delete myOne;
    }
      

  5.   

    通常是将myOne = NULL放在delete之后,
    如果这样的话,myOne = NULL这一句还会有什么作用呢?
    不是通常,而是应该这样,只有这样才是对了,你的用法错了。
    delete之后,指针是没有定义的,为了如果下面还有使用的地方能够分辨指针是否有效,赋值为NULL。如果在析构函数中,倒没有必要了。
      

  6.   

    严重同意
    if(myOne != NULL)
    {
    delete myOne;
    }
    这样的写法