Leo*_*Hat 10 c++ debugging vtable
我正在调试一个缺陷,并将其缩小到对象的vtable指针0xdddddddd. 这个答案表明Win32调试版本通常会将死记忆或已删除的内存设置为此特殊值.
需要注意的是指针本身看起来有效,它只是虚函数表指针是0xdddddddd.
这是一段代码:
std::list<IMyObject*>::const_iterator it;
for (it = myObjects.begin(); it != myObjects.end(); ++it)
{
IMyObject* pMyObject = *it;
if (pMyObject == 0)
continue;
pMyObject->someMethod(); // Access violation
}
Run Code Online (Sandbox Code Playgroud)
如果我在访问冲突的行中断并观察pMyObject,我可以看到它pMyObject本身有一个有效的地址(0x08ede388)但该__vfptr成员是无效的(0xdddddddd).
一些说明:
有关如何进一步调试的任何建议?
jan*_*anm 10
它在释放后使用指针.从析构函数中的断点获取堆栈跟踪以查看删除它的内容.或者更好的是,使用shared_ptr <>来避免问题.
| 归档时间: |
|
| 查看次数: |
11376 次 |
| 最近记录: |