ASSERT 错误,请求解答
DEBUG出现错误,但RELEASE 没有一点问题,但影响我跟踪程序。错误提示如下:
Debug Assertion Failed!
Program: ...
File: winhand.cpp
Line:199
For information on how your program cause an assertion
failure,see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
点击重试。(有机会跟进)
定位于:
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);
}
问题点数:50、回复次数:13Top
1 楼idAnts(此广告位招租)回复于 2005-04-26 17:33:05 得分 50
你这个时候看看调用堆栈,看看是你程序里的什么地方调用到了这里。Top
2 楼streamIF()回复于 2005-04-26 17:50:33 得分 0
我的程序是在我重写CListCtrl开始出现的,我用了如下:
BOOL CIFListCtrl::ListItem(const CString strSQL,
_ConnectionPtr pCon, _RecordsetPtr pSet)//这样传入后,问题就出现了。
{
.....
}
不知是这是有不对的地方,请高人指点
Top
3 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-26 18:22:37 得分 0
调试一下Top
4 楼streamIF()回复于 2005-04-27 08:46:49 得分 0
我确定是这个造成的问题,但是,这个语句很正常啊,而且我用了不同的方法,但只要用这个INSERTITEM就有出错(注意,不是每次都出错)
BOOL CIFListCtrl::ListItem(const CString strSQL,
_ConnectionPtr pCon, _RecordsetPtr pSet)//这样传入后,问题就出现了。
{
......
InsertItem(nRow,strContent);//只要有这行就出错,没有这句就没有问题,我好纳闷,
//为什么?????????????????????
}
Top
5 楼streamIF()回复于 2005-04-27 08:48:54 得分 0
InsertItem(nRow,strContent);//无论反这个函数放在什么位置,或用它的重载版,都一样,不理解
Top
6 楼vcleaner(我没当大哥很久了.......)回复于 2005-04-27 09:00:13 得分 0
ASSERT宏在Release编译的时候,已经失去其作用了,不工作了,当然不影响程序!Top
7 楼vcleaner(我没当大哥很久了.......)回复于 2005-04-27 09:01:32 得分 0
参考一下:
http://www.vckbase.com/document/viewdoc/?id=1183Top
8 楼idAnts(此广告位招租)回复于 2005-04-27 09:14:34 得分 0
你用多线程了么?Top
9 楼streamIF()回复于 2005-04-27 09:16:07 得分 0
用了,Top
10 楼streamIF()回复于 2005-04-27 09:21:51 得分 0
我有一个DLG,将我的自制CLISTCTRL->SUBCLASSDLGITEM(IDC_LIST,THIS);
但是在出问题时,线程没有打开啊Top
11 楼streamIF()回复于 2005-04-27 09:30:56 得分 0
还有一个奇怪的事:
如果我在INSERTITEM(NROW,STRCONTENT)设定断点,跟踪,
问题明显减少。(晕,是不是运行快慢造成),
如是,我SLEEP(10-1000),
结果不行.
为什么跟踪调试却不出问题,不跟踪调试就也问题??Top
12 楼idAnts(此广告位招租)回复于 2005-04-27 09:59:10 得分 0
不太清楚了。你检查看看有没有多线程访问你自己写的ListCtrl类的可能。Top
13 楼goodheartppl(goodheart)回复于 2005-04-27 14:29:34 得分 0
把代码发过来,我帮你调Top




