首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【求解释】MFC:VTable pointer错误中断

2012-03-26 
【求解释】MFC:VTablepointer异常中断程序本来是能正常运行的,出于需要修改程序,测试出现异常中断,出现中断

【求解释】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,然后重新编译工程就可以解决了。

热点排行