我在一个函数里定义了一个类指针:CTest *pTest = new CTest;
这个函数中有很多操作,也有大量的内存分配和删除等操作,但是在我这个函数没有跑完,并且我也没去调用的情况下,pTest指针在某一次我给其它变量分配内存时自动析构了。请问这是怎么回事?
我后面还有操作要继续用这个类指针,但是他析构了之后我在用就肯定出错了。这个该怎么解决?

解决方案 »

  1.   

    "这个函数中有很多操作,也有大量的内存分配和删除等操作"
    在这些代码找问题,看看在哪部分代码将它delete了。
      

  2.   

    我定义的时候是在最开始定义的,所以肯定不会超出作用域,但是在我又分配一个char* pchar = new char[10];
    的时候不知道为什么直接跑到了CTest的~CTest()里面去了,让我很疑惑。而且我在最后要if(pTest != NULL)
    {
        delete []pTest;
        pTest = NULL;这时候的pTest居然还不为空,导致了我delete失败。
      

  3.   

    “但是在我又分配一个char* pchar = new char[10];的时候不知道为什么直接跑到了CTest的~CTest()里面去了”
    你确定你是在执行这句之后直接跳到析构里边去的吗?
    然后你的析构有这段代码是吧?
    if(pTest != NULL)
    {
        delete []pTest;
        pTest = NULL;
    }
    “pTest居然还不为空” 说明你的pTest是还没释放的,那样的话跟你的“pTest指针在某一次我给其它变量分配内存时自动析构了”有点矛盾了。
    我觉得问题说清楚了才能比较容易解决。
      

  4.   

    我说的析构是指的CTest类得析构,当然不会有pTest这个指针了,CTest类析构里面放的是成员变量的删除。
    我确定在我又分配一个char* pchar = new char[10];的时候,我在CTest的析构函数设置了一个断点,在没有走到下一条程序前,直接就跑到析构里面了。
      

  5.   

    我对你的问题很感兴趣,加我Q聊,这样快点。QQ:398595378