我正在尝试调试在派生一个类并使一些函数虚拟化之后发生的崩溃。
请参阅以下示例代码:
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中也找不到任何好的调试方法。
请帮我弄清楚这个问题。我该怎么调试呢?感谢任何帮助!!!