__vftptr为NULL

Bor*_*ris 3 c++ debugging windbg visual-c++

我们从客户站点收到了故障转储.我看到其中一个结构是_stvptr是NUL.

它总是指向有问题的条件(记忆超限,删除对象两次......)或者是否存在此指针可以为空的情况.

bob*_*obo 14

您是否在类的实例上使用memset()?

我以前见过这个问题,原因就是代码

class C : SomeClassWithVirtualFunctions
{
public:
  C()
  {
    memset( this, 0, sizeof ( C ) ) ; // BAD!! sets _vfptr to 0 too
  }
}

cppcheck很整洁


Nat*_*Nat 6

您可能在堆栈上看到部分被破坏的对象.编译器可以通过清除虚函数表指针将对象的一部分标记为已销毁,这样它就可以正确实现具有"菱形"继承的类的析构函数(具有公共虚基类的类的多重继承)如果程序崩溃在破坏对象期间,您将看到转储中的部分破坏对象.

较旧的MSVC编译器没有为具有钻石继承的类正确实现析构函数.每当你试图销毁一个,程序就会崩溃.我不确定是否仍然如此.