【求解释】MFC:VTable pointer异常中断
程序本来是能正常运行的,出于需要修改程序,测试出现异常中断,出现中断的语句是:
node->subPtr.AddTail(gapnode); (1)
该语句中node是自己定义的CGAPNode类的对象,subPtr是CGAPNode类的数据成员,而且subPtr是
CList<CGAPNode*,CGAPNode*> subPtr;类型。修改程序的过程中只是给CGAPNode类加了一个新的double
类型的数据成员polyArea,并给它赋值。关于这个类并未做任何其他变动,除了给对象的polyArea赋值外也没改变对象的 其他任何操作。但是测试运行时每次运行到语句(1) 都出现异常中断,跟踪出现如下的错误提示:
// check to make sure the VTable pointer is valid
ASSERT(sizeof(CObject) == sizeof(void*));
if (!AfxIsValidAddress(*(void**)pOb, sizeof(void*), FALSE))
{
TRACE0( "ASSERT_VALID fails with illegal vtable pointer.\n ");
if (AfxAssertFailedLine(lpszFileName, nLine))
AfxDebugBreak();
return; // quick escape
}
百思不得其解,为什么会出现这样的错误。从网上也没查到答案。后来尝试把工程关掉,然后
删去工程目录下的Debug文件夹,打开工程,从新编译运行问题解决。
[解决办法]
你CGAPNode类加了一个新的double类型的数据成员polyArea,估计有些相关的文件没有得到编译,从而导致有些已编译的文件还是参照的原来的那个CGAPNode类,从而导致异常,对象的大小不一致。这种情况只需要clear,然后重新编译工程就可以解决了。