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] 也许就可以了
不过粗看 后认为你把 ph[1] 改成 ph[0] 也许就可以了
#2
这不是我的代码,而是在执行过程中出现了断言错误,然后它就跳到这个函数来了。谁能给我解释一下这个函数啊???
#3
你应该在自己的代码中查找错误。
#4
是的,我已经找到错误了,真是在感谢了。
#5
。。。看到这种帖子就恶心。。。
“我已经找到错误了”
结果不说答案...
#1
从哪抄了这么个 代码 你只贴了部分 也不知道是干什么的
不过粗看 后认为你把 ph[1] 改成 ph[0] 也许就可以了
不过粗看 后认为你把 ph[1] 改成 ph[0] 也许就可以了
#2
这不是我的代码,而是在执行过程中出现了断言错误,然后它就跳到这个函数来了。谁能给我解释一下这个函数啊???
#3
你应该在自己的代码中查找错误。
#4
是的,我已经找到错误了,真是在感谢了。
#5
。。。看到这种帖子就恶心。。。
“我已经找到错误了”
结果不说答案...