由于虚函数调用导致调试崩溃

时间:2014-01-21 22:59:02

标签: c++ crash virtual-functions

我正在尝试调试在派生一个类并使一些函数虚拟化之后发生的崩溃。

请参阅以下示例代码:

class Apple   // Existing class
{
 public:
  Apple();
  virtual ~Apple(); // changed destructor to virtual

  void one();
  virtual void two(); // changed this routine to virtual

 private:
  int i;
  Seeds *mSeed;
}

Apple::Apple()
{
 bzero(this, sizeof(Apple);
 mSeed = new Seeds(); // creating object of class Seeds.
}

void Apple::one()
{
 i = 5;
}

void Apple::two()
{
 if(mSeed)
  {
   mSeed->hasDried(i); // does some HW register access
  }
}

class RedApple : public Apple  // newly created class
{
 public:
  void two();
}

main()
{
 Apple* appPtr = new Apple();  // Old code
 appPtr->one();   // ------> No problem
 appPtr->two();   // ------> Crash happens
}

one()和two()的实现访问数据变量i。崩溃发生在创建Apple对象的遗留代码中并调用方法。如果我从声明中删除“虚拟”,它就可以正常工作。

我打印出appPtr并且它不是null。而且,我尝试打印'this',这也表现得很好。并且对象和类的大小匹配。

实际的代码太大而且复杂,以至于我无法弄清楚最新情况。我检查了很多在线论坛,并没有找到一个很好的帮助。即使我在stackOverflow中也找不到任何好的调试方法。

请帮我弄清楚这个问题。我该怎么调试呢?感谢任何帮助!!!

0 个答案:

没有答案