写了个函数显示一个图片,可是当反复调用的时候内存很快就以每秒4K的速度上升
不知道是那个东西没有释放,谁帮我看看啊!
其中p是存储图片的缓冲区,他是固定大小的,不影响内存第一次发帖,分少,大家帮帮忙啊HBITMAP hBitmap;

void* bmpInfoAdd=(void*)((int)p+14);
CClientDC dc(this);
hBitmap=CreateDIBitmap(dc.m_hDC,(BITMAPINFOHEADER*)bmpInfoAdd,CBM_INIT,bmpInfoAdd,       (BITMAPINFO*)bmpInfoAdd,DIB_RGB_COLORS);
CWnd* cwnd = GetDlgItem(IDC_STATIC); HBITMAP OldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(cwnd->GetDC());
OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);


cwnd->GetDC()->BitBlt(0,0,600,400,&MemDC,0,0,SRCCOPY);

MemDC.SelectObject(OldBitmap); DeleteObject(hBitmap);
DeleteObject(OldBitmap);

MemDC.DeleteDC();
dc.DeleteDC();

解决方案 »

  1.   

    bmpInfoAdd跟bmpInfoAdd若是函数参数传进来,应该在函数调用结束后,进行释放
      

  2.   

    dc.DeleteDC() 换成 ReleaseDC(&dc)CWnd->GetDC()->BitBlt(...)
    换成
    dc.BitBlt(....)
    看看这样行不行~~
    如果不行的话,那问题可能出在图片上如果你这函数要经常使用的话
    hBitmap 定义为类中的成员变量,在类的构造函数里载入,在析构函数里释放
    这样就不用贫乏读图了。不过这些 GDI 操作我觉得都很复杂,自己总觉得所有代码都已经优化得最好了
    但每次都会看到在调用函数的时候内存都增加...
      

  3.   

    通过注释语句和提前返回的方法找到了内存增加的具体位置了
    就是那个CDC MemDC;搞的鬼,如果注掉BitBlt的那些话,只留这个CDC的话内存一样飙升,大哥
    你知道这个CDC是怎么回事吗?
      

  4.   

    问题已解决,主要是没有熟悉MFC的类库,全部改用API后就没有不可预料的内存漏洞了,谢谢
    不过程序刚开始运行的时候内存还是会有一点的波动,后来就稳定了。