指针释放有关问题,程序开始没有有关问题,时间久啦就报内存异常

指针释放问题,程序开始没有问题,时间久啦就报内存错误

void CSerailDealDlg::Drawpicture()

CDC PicPDC;//释放
CBitmap bg_bmp;  //释放
CPen* pOldPen;   //没有释放
static CRect rect;
static CDC *myPDC;
static CWnd *cWND;
CPen   pen;//释放
cWND = GetDlgItem(IDC_MyPicture);
cWND->GetClientRect(&rect);
myPDC = cWND->GetDC(); //此DC负责在屏幕显示
pen.CreatePen(PS_SOLID,1,RGB(255,0,255));   //选择画笔设备
PicPDC.CreateCompatibleDC(myPDC);
bg_bmp.CreateCompatibleBitmap(myPDC,rect.Width(),rect.Height());


PicPDC.SelectObject(&pen);

PicPDC.SelectObject(&bg_bmp);
PicPDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));

CRect rtDraw(rect.top,rect.left,rect.Width(),rect.Height());
CRgn DrawRgn;
DrawRgn.CreateRectRgn(rtDraw.left,rtDraw.top,rtDraw.right,rtDraw.bottom);
PicPDC.SelectClipRgn(&DrawRgn);
for(cktnum=0;cktnum<6;cktnum++)
{

if(ck[cktnum])
{
pOldPen=PicPDC.SelectObject(&pen);
CPen pen1(PS_SOLID, 2, /*RGB(0,0,0)*/colorArray[cktnum]);  //红色画笔
PicPDC.SelectObject(&pen1);
/********************************/
cktnumj = m_lengdraw;
cktnumi = m_lengdraw-1;
//K = 601
//H = 
for(cktnump = 1;cktnump < 820; cktnump += 1)
{
PicPDC.MoveTo(cktnump,  m_draw[cktnum][cktnumj]%300-chp[cktnum]);
PicPDC.LineTo(cktnump-1,m_draw[cktnum][cktnumi]%300-chp[cktnum]);
cktnumj --;
cktnumi --;
if(cktnumj < 0)
{
cktnumj = 600;
}
if(cktnumi < 0)
{
cktnumi = 600;
}

}
/********************************/
PicPDC.SelectObject(pOldPen);
pen1.DeleteObject();
}
}

myPDC->BitBlt(0,0,rect.Width(),rect.Height(),&PicPDC,0,0,SRCCOPY);
//pOldPen.DeleteObject();
pen.DeleteObject();
bg_bmp.DeleteObject();  
PicPDC.DeleteDC();  
}
------解决方案--------------------
 cWND->GetDC(); 
没有看到ReleaseDC
------解决方案--------------------
申请内存就释放。
------解决方案--------------------
引用:
大家觉得要怎么释放了 ReleaseDC 那个指针不是静态的吗

这个释放的不是指针,也不是内存,而是资源,你用GetDC申请了资源,用完了就要释放,要不然这个GDI资源就会一直被占用。
------解决方案--------------------
create了4个, 但是却没看到对应个数的delete.
Select也成对出现.
Get和Release也要成对出现. 自己慢慢检查下吧.