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

时间:2010-10-19 07:09:29

标签: c++ linux vptr

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

当一个对象丢失其VPTr时可能出现的情况。

提前致谢, Brijesh

3 个答案:

答案 0 :(得分:6)

  1. 内存已被删除,即某些东西覆盖了内存。

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

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

答案 1 :(得分:5)

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

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

在使用vptr。

的对象上使用之前一切正常

答案 2 :(得分:0)

可能是您在对象的析构函数中尝试使用v表。目前无法使用v表。