欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > 在Win32调试版本中,什么会使VTable指针变为0xdddddddd?

在Win32调试版本中,什么会使VTable指针变为0xdddddddd?

日期:2023-09-16 14:23

| 我正在调试缺陷,并将其范围缩小到对象“ 0”的vtable指针。此答案表明Win32调试版本通常会将死内存或已删除的内存设置为此特殊值。 请注意,指针本身看起来是有效的,只是vtable指针为“ 0”。 这是一段代码:
std::list::const_iterator it;
for (it = myObjects.begin(); it != myObjects.end(); ++it)
{
    IMyObject* pMyObject = *it;
    if (pMyObject == 0)
        continue;

    pMyObject->someMethod(); // Access violation     
}
如果我在访问冲突的行中断并观看
pMyObject
,我可以看到
pMyObject
本身具有有效地址(
0x08ede388
),但是but6ѭ成员无效(
0xdddddddd
)。 一些注意事项: 它是一个单线程应用程序,因此很可能不是竞争条件或互斥问题。 似乎没有任何明显的问题,例如在访问对象之前在调用堆栈中删除该对象。 此问题似乎只能在Windows 2008 Server上再现,而在Windows 7上则无法再现。 关于如何进一步调试的任何建议?

关灯