这段代码哪边需要释放啊有内存泄露,怎么释放

这段代码哪边需要释放啊?有内存泄露,如何释放
Locked=true;
try
{   if(pDC==NULL)
       return;
    Graphics g(pDC->m_hDC); 
//图的坐标(含外框)
CRect rt;
pDC->GetWindow()->GetClientRect(&rt);
GraphT=rt.top+MarginGraphT;
GraphB=rt.bottom-MarginGraphB;
GraphL=rt.left+MarginGraphL;
GraphR=rt.right-MarginGraphR;
//计算区域(不含外框)
xSrc=GraphL+MarginL;
ySrc=GraphB-MarginB;
xWidth=(GraphR-MarginR)-(GraphL+MarginL);
yHeight=(GraphB-MarginB)-(GraphT+MarginT);
Bitmap bmp(rt.Width(),rt.Height());
DrawAxis(&bmp,GraphType);
//画下面的三个颜色示例
if(GraphType==0)
{
           DrawLegend(&bmp);
}

if(DataCount!=0)
{

//画图
switch(GraphType)
{
case 0:
//画线
DrawLineChart(&bmp);
break;
case 1:
DrawBarChart(&bmp);
break;
case 2:
DrawLineChartByPos(&bmp);
default:
break;

}
}
    //g.DrawImage(&bmp,0,0,GraphR-GraphL+100,GraphB-GraphT+100);
HBITMAP hbmp;
bmp.GetHBITMAP(Color(255, 255,255, 255),&hbmp);
CBitmap *pbmp=CBitmap::FromHandle(hbmp);
if(!pbmp)
{
exit(0);
}

BITMAP bmpInfo;
        pbmp->GetBitmap(&bmpInfo);
    CDC dcMemory;
        dcMemory.CreateCompatibleDC(pDC);
        CBitmap* pOldBitmap = dcMemory.SelectObject(pbmp);
pDC->BitBlt(0,0,bmpInfo.bmWidth,bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY);
pbmp->DeleteObject();
        dcMemory.SelectObject(pOldBitmap);

}
catch(...)
{
}
Locked=false;

------解决方案--------------------
一方面你调用了一些函数,不知道这些函数中有没有泄漏的地方。
另外包括dcMemory没有显式的释放
还有就是

if(!pbmp)
{
exit(0);
}

太强悍了。

另外你的catch什么也没干,一旦try中有异常,那么其中申请的资源,就不能得到释放。
------解决方案--------------------
dcMemory.DeleteDC();

引用:
嗯。感谢两位,这个怎么释放啊?RelaseDc(句柄是哪个,dcMemory),还有其他的地方要释放的吗?

------解决方案--------------------
引用:
嗯。感谢两位,这个怎么释放啊?RelaseDc(句柄是哪个,dcMemory),还有其他的地方要释放的吗?


另外,你要弄清楚 RelaseDc 和 DeleteDC 的区别呀!

凡是Get出来的DC,如GetDC、GetWindowDC 等等,释放的时候要用 RelaseDc
凡是new出来的DC,如CreateDC、CreateCompatibleDC等等,释放的时候要用 DeleteDC