一个常见的内存泄漏

内存,此乃兵家必争之地,内存是何其重要,虽然windows现在规定一个进程在32位系统中可以自由使用32g的内存,但是这些是依靠虚拟交换来实现的,

 在windows的中的CWnd中,如果你需要使用GetDc, ReleaseDc,则就对不起,每一次就造成了四个字节的内存泄漏。那怎么办。

 

 使用::GetDC  和 ::ReleaseDC,就是使用系统自己的API 来实现。

 

 例子如下:

    for (int i = 0; i < 1000; i++)

    {
        pDC = GetDC ();
        ReleaseDC (pDC);
  }
  是泄漏、泄漏、再泄漏。
解决办法:
 for (int i = 0; i < 1000; i++)
    {
          hDC = ::GetDC (m_hWnd);  
               //m_hwnd 是你的应用程序中的某个窗口的句柄,通过这个句柄,然后得到这个句柄的 device context
        ::DrawText (hDC, L"Testing...", 10, &rect, DT_CENTER);
        ::ReleaseDC (m_hWnd, hDC);
    }
 ok,没有了内存泄漏,我们又保住了丢失的内存,取得了阶段性的成果。

 详见 微软的关于此次内存泄漏的原文:
  http://support.microsoft.com/kb/819635/zh-cn



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值