用boundschecker检查出来了一点结果,请问以下三段程序存在资源(RESOURCE)泄漏吗?---->>是boundschecker定位泄露的语句。
1、
---->>HANDLE hSem = CreateSemaphore (NULL, 1, 1, "OnlyOneForeload");
    if (hSem != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
{
        CloseHandle (hSem);        HWND hwnd = FindWindow (VQCGUI_CLASS, NULL);
        BringWindowToTop (hwnd);
        ShowWindow (hwnd, SW_SHOWMAXIMIZED);        return TRUE;
    }
2、m_lstEventType是一个CLISTBOX,m_ListBoxRectType是CRECT,m_hbListBoxType是HBITMAP都是类变量    m_lstEventType.GetClientRect(&m_ListBoxRectType);
m_lstEventType.m_bmp.LoadBitmap(IDB_BKCLIENT);
HBITMAP htempbmp;
m_hbListBoxType = (HBITMAP )m_lstEventType.m_bmp.Detach();
htempbmp = ::GetSizeBITMAP(m_hbListBoxType , m_ListBoxRectType.right, m_ListBoxRectType.bottom);
m_lstEventType.m_bmp.Attach(htempbmp); 3、
HBITMAP GetSizeBITMAP(HBITMAP hBitmap, int w, int h)
{
CDC sourceDC, destDC;
sourceDC.CreateCompatibleDC( NULL );
destDC.CreateCompatibleDC( NULL );
BITMAP bm;
::GetObject( hBitmap, sizeof( bm ), &bm );
---->>   HBITMAP hbmResult = ::CreateCompatibleBitmap(CClientDC(NULL), w, h);
HBITMAP hbmOldSource = (HBITMAP)::SelectObject( sourceDC.m_hDC, hBitmap );
HBITMAP hbmOldDest = (HBITMAP)::SelectObject( destDC.m_hDC, hbmResult );
destDC.BitBlt(0, 0, w, h, &sourceDC, 0, 0, SRCCOPY );
::SelectObject( sourceDC.m_hDC, hbmOldSource );
::SelectObject( destDC.m_hDC, hbmOldDest );
          sourceDC.DeleteDC();
          destDC.DeleteDC();
return hbmResult;
}
hbmResult是返回值,在返回函数里用::DeleteObject(hbmResult);也释放了。

解决方案 »

  1.   

    MFC本身就存在Resource Leak,当然你的MFC程序当然也就有了。
      

  2.   

    但是我的程序确实存在内存泄露问题呀?RELIASE版的程序运行一段时间后,用任务查看器查看内存增加了好多。我用boundschecker查看,就查看出这些问题。
      

  3.   

    1、内存泄露是说一段内存被分配了,但是不能被引用(指针超出了作用域),也不能被释放了
    比如
    { char* p=new char[20];
    ...
    }
    //到了这里,如过p 没有释放,那就是内存泄漏(假如这段内存没有其他用途)
    2、内存泄漏是指针的引用不能访问
    造成一个Block区的内存不能访问
      

  4.   

    好多都是MFC的问题,留个EMAIL,给你个例子看看。