ASSERT咋回事

ASSERT怎么回事啊
我编了一个对话框的程序,在设计的界面的时候用到了CBitmap类和CDC类,
但是总是出现这样的ASSERT失败:
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);
这一句总是失败,到底为什么啊????救救我吧,我在这一点已经停了好长时间了。

------解决方案--------------------
请定位到你自己的错误代码。
------解决方案--------------------
编译是没有错呀
执行到这里的时候本来ph[1] == h
但是你执行到这里时ph[1] != h