为什么我的C ++对象失去了VPTr

在debugging某个程序的核心转储时,我发现它所包含的多态的对象失去了它的VPTr,我可以看到它指向NULL。

什么可能是一个对象失去VPTr的情况。

在此先感谢Brijesh

Solutions Collecting From Web of "为什么我的C ++对象失去了VPTr"

  1. 内存已被丢弃,即某事覆盖了内存。

  2. 你通过调用delete或直接调用析构函数来销毁它。 这通常不会将vptr清空,只会导致它指向基类的vtable,但这取决于您的实现。

最有可能的情况1.如果你有一个调试器有内存断点,如果你可以可靠地重现问题,请在vptr上设置一个内存断点,看看有什么修改它。

可能有东西覆盖了整个对象。 像这样的东西:

 memset( object, 0, sizeof( *object ) ); 

这是好的,直到它用vptr对象。

这可能是你正在试图在你的对象的析构函数中使用v-表。 v表在此时不可用。