BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC) 
{    CDC MemDC; 
    MemDC.CreateCompatibleDC(pDC); //创建与内存兼容的DC
    MemDC.DeleteDC(); 
    return FALSE;
}本是写List control双缓冲显示的,但发现存在内存溢出,于是删除一些代码测试,
发现上面代码也存在内存溢出,不知是什么原因,还望大家帮帮!
极度郁闷,调了二天还不能解决!

解决方案 »

  1.   

    一样啊,试过了,还是不行。
    按MSDN:应该是用DeleteDC 的
    An application must not delete a device context whose handle was obtained by calling CWnd::GetDC. Instead, it must call CWnd::ReleaseDC to free the device context. The CClientDC and CWindowDC classes are provided to wrap this functionality. The DeleteDC function is used to delete device contexts created with CreateDC, CreateIC, or CreateCompatibleDC.
      

  2.   

    BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC)  
    {  CDC MemDC;  
      MemDC.CreateCompatibleDC(pDC); //创建与内存兼容的DC
      return FALSE;
    }
    这样试过了,还是存在溢出。
      

  3.   

    1。你看看MemDC.DeleteDC(); 函数是否执行成功,看看它的返回值
    2。给你篇文章看看:
    http://www.rosoo.net/a/embedded_o/201001/8454.html
      

  4.   

    1.MemDC.DeleteDC()测试过了,返回值为1,说明调用是成功的。
    2.http://www.rosoo.net/a/embedded_o/201001/8454.html文章早看到过,他是没
    SelectObject(pOldBit)(恢复),就直接 MemBitmap.DeleteObject()(删除);当然会出错。
      

  5.   

    用在Microsft为Windows CE提供了Remote Performance Monitor工具,通过ActiveSync,我们可以在PC机上远程查看Windows CE上的一些信息。这样,通过查看那个程序的Heap Memory使用情况,不就可以找到内存泄露的地方了么?这个你应该会吧,自动动手丰衣足食.
      

  6.   

    我再次测试了一下,
    代码放在:类继承(derived class ):
    class CListCtrlEx : public CListCtrl里的OnEraseBkgnd(CDC* pDC) 就会产生内存溢出。但不放在这里,直接放到void *****Dlg::OnTimer(UINT nIDEvent)里就不会产生内存溢出,
    纳闷了,这是为什么?? 
      

  7.   

    Remote Performance Monitor工具,通过ActiveSync,我们可以在PC机上远程查看Windows CE上的一些信息。这样,通过查看那个程序的Heap Memory使用情况,看到的是100%的占用率