我的程序中没有用到new,malloc关键字,但是在9x系统下,内存资源再减少,请问还有什么其他的情况会产生内存泄漏, 我怀疑是重复画图造成的,我用了 CDC,但我已经ReleaseDC(pDC)了

解决方案 »

  1.   

    还有别的,我知道的还有BSTR 如果不释放的话,也会有泄漏
      

  2.   

    我再想问一下比如
    test()
    {
    CString str;
    }
    如果这个函数不停的循环,会不会内存泄漏,如果把Cstring str放到头文件里,会不会泄漏?
      

  3.   

    函数结束前str会被析构。什么叫把Cstring str放到头文件里?应该也不会泄漏吧。
      

  4.   

    创建一个MFC 封装对象的时候,没有释放也会
      

  5.   

    Windows的GDI资源也要释放,比如You created a font using CreateFont(),When you no longer need the font, call the DeleteObject function to delete it.
      

  6.   

    请大家帮忙看一下,下面的代码测试由内存泄漏,但是我实在看不出来时哪里泄漏了
    CDC *pDC = GetDC();         
    CBrush SolidBrush(RGB(30,30,30));
             pDC->SelectObject(&SolidBrush);
    pDC->Rectangle(CRect(100,170,750,370));
    CPen pen;
    pen.CreatePen(PS_SOLID,1,RGB(90,170,30));
    pDC->SelectObject(&pen);
    pDC->MoveTo(100,210);
    pDC->LineTo(750,210);
             pen.DeleteObject();
             ReleaseDC(pDC);
      

  7.   


    你的pen还和CDC指针绑定在一起,
    所以这一句pen.DeleteObject();没有作用,并不能删除pen
    而且你自己定义的CBrush也没有删除。我想应该这样把CDC *pDC = GetDC();  
    CBrush *pOldBrush;
    CPen *pOldPen;       
    CBrush SolidBrush(RGB(30,30,30));
             pOldBrush=pDC->SelectObject(&SolidBrush);//不同
    pDC->Rectangle(CRect(100,170,750,370));
    CPen pen;
    pen.CreatePen(PS_SOLID,1,RGB(90,170,30));
    pOldPen=pDC->SelectObject(&pen);//不同
    pDC->MoveTo(100,210);
    pDC->LineTo(750,210);
             pdc->SelectObject(pOldBrush);         
             ReleaseDC(pDC);
      

  8.   

    不好意思,刚才没有写完就按了回复了
    接着来你的pen还和CDC指针绑定在一起,
    所以这一句pen.DeleteObject();没有作用,并不能删除pen
    而且你自己定义的CBrush也没有删除。我想应该这样把CDC *pDC = GetDC();  
    CBrush *pOldBrush;
    CPen *pOldPen;       
    CBrush SolidBrush(RGB(30,30,30));
             pOldBrush=pDC->SelectObject(&SolidBrush);//不同
    pDC->Rectangle(CRect(100,170,750,370));
    CPen pen;
    pen.CreatePen(PS_SOLID,1,RGB(90,170,30));
    pOldPen=pDC->SelectObject(&pen);//不同
    pDC->MoveTo(100,210);
    pDC->LineTo(750,210);
             pdc->SelectObject(pOldBrush);//加上
             pDC->SelectObject(pOldPen)//加上
             ReleaseDC(pDC);
    这样就把你自己定义的刷子和笔和CDC断开了联系,由于SolidBrush
    和pen是局部变量,所以他们可以自动析构!