在debugging某个程序的核心转储时,我发现它所包含的多态的对象失去了它的VPTr,我可以看到它指向NULL。
什么可能是一个对象失去VPTr的情况。
在此先感谢Brijesh
内存已被丢弃,即某事覆盖了内存。
你通过调用delete或直接调用析构函数来销毁它。 这通常不会将vptr清空,只会导致它指向基类的vtable,但这取决于您的实现。
最有可能的情况1.如果你有一个调试器有内存断点,如果你可以可靠地重现问题,请在vptr上设置一个内存断点,看看有什么修改它。
可能有东西覆盖了整个对象。 像这样的东西:
memset( object, 0, sizeof( *object ) );
这是好的,直到它用vptr对象。
这可能是你正在试图在你的对象的析构函数中使用v-表。 v表在此时不可用。