有三个类,Base,Class1,Class2,
现在分别在Class1,Class2中定义各自的成员变量Base *m_BaseCtrl;
Class1,Class2使用Base基本相同,假设Class1是进行加密处理,Class2进行解密处理,Base中是对对象的加解密处理模块,在Class1加密/Class2解密的相应位置进行如下代码:
if(m_BaseCtrl==NULL)
{
  m_BaseCtrl = new Base;
  m_BaseCtrl进行初始化工作;
}
进行加密/解密处理;当然在Class1和Class2的构造函数中m_BaseCtrl=NULL,在析构函数中delete m_BaseCtrl.
现在有这样一个问题,当我的应用程序开启后,如果加密后马上运行解密或者解密后马上运行加密,都会进入if判断,并且new Base会出现异常;如果仅仅是多次运行加密或者多次运行解密,那么不会出任何问题,因为运行一次后m_BaseCtrl将不会为空,但是在两个类之间进行切换的话每切换一次就会进入if判断一次,运行就会出错,这是什么原因呢?请高手帮忙~~~~

解决方案 »

  1.   

    你在delete之后有没有将指针置空呢?即:
    delete BaseCtrl;
    BaseCtrl = NULL;   // 这一句在你这个应用中非常重要
      

  2.   

    出现了野指针现象,在delete一个指针后,应立即将该指针赋为NULL,改到试下。
      

  3.   

    恩 ,置了的BaseCtrl = NULL;
      

  4.   

    也就是说在你加解密转换的时候有没有先把前一个类的m_BaseCtrl给释放掉
      

  5.   

    Base的析构函数添加virtual设置成虚析构函数
    还有delete后,把指针BaseCtrl设置为NULL.