为什么我的 C++对象失去其 VPTr

发布于 2024-09-27 17:05:31 字数 118 浏览 7 评论 0 原文

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

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

提前致谢, 布里杰什

While debugging one of the program's core dump I came across the scenario where its contained object which is polymorphic loses its VPTr and I can see its pointing to NULL.

What could be the scenario when an object loses its VPTr.

Thanks in advance,
Brijesh

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

猫烠⑼条掵仅有一顆心 2024-10-04 17:05:31
  1. 内存已被废弃,即某些内容覆盖了内存。

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

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

  1. The memory has been trashed, i.e. something overwrote the memory.

  2. You destroyed it by calling delete or by invoking the destructor directly. This typically does not NULL out the vptr, it will just end up having it point to the vtable of the base class, but that depends on your implementation.

Most likely, case 1. If you have a debugger that has memory breakpoints and if you can reproduce the problem reliably, set a memory breakpoint on the vptr and see what's modifying it.

一曲爱恨情仇 2024-10-04 17:05:31

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

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

这很好,直到它被用在带有 vptr 的对象上。

Likely something overwrote the whole object. Something like this:

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

which is fine until it is used on an object with vptr.

月亮是我掰弯的 2024-10-04 17:05:31

您可能正在尝试在对象的析构函数期间使用 v 表。 v 表目前不可用。

It may be that you are trying to use the v-table during your object's destructor. The v-table is not available at this time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文