7

在调试程序的核心转储之一时,我遇到了这样一种情况:它包含的多态对象丢失了它的 VPTr,我可以看到它指向 NULL。

当对象丢失其 VPTr 时可能会出现什么情况。

在此先感谢, Brijesh

4

3 回答 3

7
  1. 内存已被破坏,即某些东西覆盖了内存。

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

最有可能的情况是第 1 种情况。如果您的调试器具有内存断点,并且您可以可靠地重现问题,请在 vptr 上设置内存断点并查看修改它的内容。

于 2010-10-19T07:16:03.620 回答
5

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

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

这很好,直到它用于具有 vptr 的对象。

于 2010-10-19T07:25:15.873 回答
0

可能是您试图在对象的析构函数期间使用 v-table。v-table 目前不可用。

于 2010-10-19T09:27:57.077 回答