在调试程序的核心转储之一时,我遇到了这样一种情况:它包含的多态对象丢失了它的 VPTr,我可以看到它指向 NULL。
当对象丢失其 VPTr 时可能会出现什么情况。
在此先感谢, Brijesh
内存已被破坏,即某些东西覆盖了内存。
您通过调用 delete 或直接调用析构函数来销毁它。这通常不会使 vptr 为空,最终只会让它指向基类的 vtable,但这取决于您的实现。
最有可能的情况是第 1 种情况。如果您的调试器具有内存断点,并且您可以可靠地重现问题,请在 vptr 上设置内存断点并查看修改它的内容。
可能有什么东西覆盖了整个对象。像这样的东西:
memset( object, 0, sizeof( *object ) );
这很好,直到它用于具有 vptr 的对象。
可能是您试图在对象的析构函数期间使用 v-table。v-table 目前不可用。