首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

dc->selectobject(CPen)招致内存泄露

2013-01-08 
dc-selectobject(CPen)导致内存泄露void CDlgImageView::OnPaint(){CPen penSelect(PS_SOLID,9,RGB(0,255

dc->selectobject(CPen)导致内存泄露
void CDlgImageView::OnPaint()
{   

     CPen penSelect(PS_SOLID,9,RGB(0,255,0));
     m_pDcImageTmp->SelectObject(&penSelect);
     m_pDcImageTmp->RectangLe(....);
     //m_pDcImageTmp是我new 出来的一个临时DC; 并且在OnPaint方法后面重新赋予控件DC
           //m_pDcImageTmp->SelectObject(&penSelect);这句话会导致内存泄露,但是不是每次都会出现内存泄漏
           我查了程序注释掉这句话,内存不会出现任何问题,但是一旦加上这句话就会出现4KB的内存泄漏(不是每次都出)
         我在OnMouseMove方法中去刷新OnPaint的方法,就会出现大量的内存泄漏

}
[解决办法]
你前面不是已经select一次了吗?
 m_pDcImageTmp->SelectObject(&penSelect);

[解决办法]
HPEN hOldPen=m_pDcImageTmp->SelectObject(&penSelect);
...
m_pDcImageTmp->SelectObject(hOldPen);
DeleteObject((HPOEN)penSelect);
必须恢复原来的,
否则penSelect是delete不掉的。 
[解决办法]
那你pDcImageTmp对象 DeleteDC()了么?

GetDC要用ReleaseDC,对象要用DeleteDC()
[解决办法]
2楼怎么没有了?
HPEN hOldPen=(HPEN)m_pDcImageTmp->SelectObject(&penSelect);
。。。

m_pDcImageTmp->SelectObject(hOldPen);
必须恢复,否则delete不掉的。


[解决办法]
保存SelectObject返回的旧的PEN,最后SelectObject旧PEN,才能DeleteObject()
[解决办法]
m_pDcImageTmp->SelectObject(hOldPen); 
penSelect.DeleteObject()
[解决办法]
马克一下,做个记号。最近也也到类似的问题。

热点排行