在调试程序的一个核心转储时,我遇到了该方案,其中包含多态性的对象失去了VPTR,我可以看到它指向NULL。

当对象失去其VPTR时,可能是什么情况。

预先感谢Brijesh

有帮助吗?

解决方案

  1. 内存已被浪费,即某些内容覆盖了内存。

  2. 您通过调用Delete或直接调用灾难来摧毁它。这通常不会将VPTR删除,最终将它指向基类的VTable,但这取决于您的实现。

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

其他提示

可能会覆盖整个对象。这样的事情:

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

这是可以的,直到它用于带有VPTR的对象。

可能是您试图在对象的破坏者期间使用V台。 V-Table目前尚不可用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top