+ -
当前位置:首页 → 问答吧 → 绘图过程中,if不能检测到的错误,为何ASSERT却能检测到!?

绘图过程中,if不能检测到的错误,为何ASSERT却能检测到!?

时间:2011-12-25

来源:互联网

各位大侠:
  小弟最近遇到一个莫名其妙的问题,百思不得其解,向各位求助。我在进行绘图过程中,有如下语句:
 if (m_imageShow1.GetDC()->m_hDC !=NULL)
{
ASSERT(m_imageShow1.GetDC()->m_hDC != NULL);
m_imageShow1.GetDC()->BitBlt( 0, 0, rect.right-rect.left, rect.bottom-rect.top, &memDC_1, 0, 0, SRCCOPY );
}
  该程序中,理论上,只要能进到if内部,则“m_imageShow1.GetDC()->m_hDC !=NULL”肯定成立,但为什么我的程序有时却能够被ASSERT检测到错误,并被中断。这个问题不是一直都出现的,而是在程序反复运行多次后,才会出现。也因此,在release模式下,我的程序会莫名其妙的退出。请各位大侠不吝赐教!小弟感激不尽!!

作者: hcl545   发布时间: 2011-12-25

不要纠结于为何assert能捕捉,而if不能。
应该重点放在完善代码上。

尝试去掉ASSERT(m_imageShow1.GetDC()->m_hDC != NULL);试试。

作者: fight_in_dl   发布时间: 2011-12-25

不要随便用GetDC吧,理论上,每次GetDC都要配合一次ReleaseDc

你这连着两次使用GetDC,俺脚着不对。

作者: jennyvenus   发布时间: 2011-12-25

运行多次,gdi估计就因为这样耗尽了,所以俺脚着就在适当的时候GetDC一次就行了,不用之后ReleaseDC,其他的时候,不随便执行GetDC了。

作者: jennyvenus   发布时间: 2011-12-25

上面已经说了,gdi泄露。导致获取hdc出错

作者: Allen_zhang   发布时间: 2011-12-25

函数的副作用

作者: Lactoferrin   发布时间: 2011-12-25

if (m_imageShow1.GetDC()->m_hDC !=NULL)
==========
这里调用GetDC之后没有释放,可能会造成GDI资源泄漏。
另外,在if中调用GetDC成功并不代表后面调用GetDC也一定会成功。

作者: wltg2001   发布时间: 2011-12-25