帮一下忙吧,大侠们

时间:2021-08-13 19:08:28
谁能给我解释一下下面这段程序:

void CHandleMap::RemoveHandle(HANDLE h)
{
// make sure the handle entry is consistent before deleting
CObject* pTemp = LookupTemporary(h);
if (pTemp != NULL)
{
// temporary objects must have correct handle values
HANDLE* ph = (HANDLE*)((BYTE*)pTemp + m_nOffset);  // after CObject
ASSERT(ph[0] == h || ph[0] == NULL);
if (m_nHandles == 2)
ASSERT(ph[1] == h);
}
pTemp = LookupPermanent(h);
if (pTemp != NULL)
{
HANDLE* ph = (HANDLE*)((BYTE*)pTemp + m_nOffset);  // after CObject
ASSERT(ph[0] == h);
// permanent object may have secondary handles that are different
}
// remove only from permanent map -- temporary objects are removed
//  at idle in CHandleMap::DeleteTemp, always!
m_permanentMap.RemoveKey((LPVOID)h);
}

怎么看也看不懂啊,我在作位图操作时总是能遇到:ASSERT(ph[1] == h); 这一句断言错误。帮下吧,我找几天也找不出原因啊???????

5 个解决方案

#1


从哪抄了这么个 代码 你只贴了部分 也不知道是干什么的

不过粗看 后认为你把 ph[1] 改成 ph[0] 也许就可以了

#2


这不是我的代码,而是在执行过程中出现了断言错误,然后它就跳到这个函数来了。谁能给我解释一下这个函数啊???

#3


你应该在自己的代码中查找错误。

#4


是的,我已经找到错误了,真是在感谢了。

#5


引用 4 楼 sea313081574 的回复:
是的,我已经找到错误了,真是在感谢了。


。。。看到这种帖子就恶心。。。

“我已经找到错误了”
结果不说答案...

#1


从哪抄了这么个 代码 你只贴了部分 也不知道是干什么的

不过粗看 后认为你把 ph[1] 改成 ph[0] 也许就可以了

#2


这不是我的代码,而是在执行过程中出现了断言错误,然后它就跳到这个函数来了。谁能给我解释一下这个函数啊???

#3


你应该在自己的代码中查找错误。

#4


是的,我已经找到错误了,真是在感谢了。

#5


引用 4 楼 sea313081574 的回复:
是的,我已经找到错误了,真是在感谢了。


。。。看到这种帖子就恶心。。。

“我已经找到错误了”
结果不说答案...