这段截屏代码有内存泄漏有关问题么

这段截屏代码有内存泄漏问题么?
CopyScreenToBitmap(LPRECT   lpRect)   //lpRect   代表选定区域
{
HDC   hScrDC,   hMemDC;          
//   屏幕和内存设备描述表
HBITMAP   hBitmap,hOldBitmap;    
//   位图句柄
int               nX,   nY,   nX2,   nY2;          
//   选定区域坐标
int               nWidth,   nHeight;          
//   位图宽度和高度
int               xScrn,   yScrn;                
//   屏幕分辨率
//   确保选定区域不为空矩形
if   (IsRectEmpty(lpRect))
return   NULL;
//为屏幕创建设备描述表
hScrDC   =   CreateDC(_TEXT( "DISPLAY "),   NULL,   NULL,   NULL);
if   (hScrDC==0)     MessageBox(_T( "CreateDC   Fail "),NULL,MB_OK);
//为屏幕设备描述表创建兼容的内存设备描述表
hMemDC   =   CreateCompatibleDC(hScrDC);
if   (hMemDC==0)     MessageBox(_T( "CreateCompatibleDC   Fail "),NULL,MB_OK);
//   获得选定区域坐标
nX   =   lpRect-> left;
nY   =   lpRect-> top;
nX2   =   lpRect-> right;
nY2   =   lpRect-> bottom;
//   获得屏幕分辨率
xScrn   =   GetDeviceCaps(hScrDC,   HORZRES);
yScrn   =   GetDeviceCaps(hScrDC,   VERTRES);
//确保选定区域是可见的
if   (nX   <   0)
nX   =   0;
if   (nY   <   0)
nY   =   0;
if   (nX2   >   xScrn)
nX2   =   xScrn;
if   (nY2   >   yScrn)
nY2   =   yScrn;
nWidth   =   nX2   -   nX+1;
nHeight   =   nY2   -   nY+1;
//   创建一个与屏幕设备描述表兼容的位图
hBitmap=CreateCompatibleBitmap(hScrDC,nWidth,nHeight);
if   (hBitmap==0)     MessageBox(_T( "hBitmap   Create   Fail "),NULL,MB_OK);
//   把新位图选到内存设备描述表中
hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);
//   把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC,0,0,   nWidth,nHeight,hScrDC,   nX,   nY,   SRCCOPY);
//得到屏幕位图的句柄
hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap);
//清除
if   (DeleteDC(hScrDC)==0)   MessageBox(_T( "hScrDC   Fail "),NULL,MB_OK);
if   (DeleteDC(hMemDC)==0)   MessageBox(_T( "hMemDC   Fail "),NULL,MB_OK);
//   返回位图句柄
return   hBitmap;

这是网上搜来的一段截屏代码,在我的程序里每秒调用一次....大概一个小时左右开始出错......但始终没看出哪里有问题啊.........请高手指教....Orz...

------解决方案--------------------
句柄hBitmap和hOldBitmap没有释放,请使用DeleteObject (hBitmap)。

另外是否有内存泄漏,调试器会给予提示的,请打开该选项;还可以在任务管理器的性能中查看内存是否持续增长。
------解决方案--------------------
hScrDC = CreateDC(_TEXT( "DISPLAY "), NULL, NULL, NULL);
改为
GetDC()
最后
ReleaseDC()试试

你的问题应该是GDI资源泄露。不是内存泄露。

------解决方案--------------------


打开Windows任务管理器,把GDI对象列选上

运行你的程序,看那个值是不是一直在增加,当增加到很大时就出错

如果是这样,不是有些H对象没有删除