错误: 内存泄漏,当您使用 GetDC 方法和 ReleaseDC 方法的 CWnd 类版本

症状
调用CWnd::GetDC函数跟CWnd::ReleaseDC函数的代码运行时,会出现 4 个字节的内存泄漏。
原因
导致此错误的原因是当前未知。
解决方案
若要避免此问题,请不要使用GetDC方法和ReleaseDC方法的CWnd类版本。使用GetDC函数和ReleaseDC函数。
状态
Microsoft 已经确认这是在本文开头部分列出的 Microsoft 产品中的漏洞。
详细信息
再现现象的步骤

在这种方法是从CWnd派生的类的一部分,插入以下代码在您的应用程序:


CDC *pDC;
    RECT rect;

    GetClientRect (&rect);

    for (int i = 0; i < 1000; i++)
    {
        pDC = GetDC ();
        ReleaseDC (pDC);
  }

如果运行此代码,然后检查系统内存之前和之后运行的代码,您注意到系统内存泄漏四个字节,每个迭代。如果您的代码更改为下面的代码中,不会发生内存泄漏:
HDC hDC;
       RECT rect;
    ::GetClientRect (m_hWnd, &rect);

    for (int i = 0; i < 1000; i++)
    {
        hDC = ::GetDC (m_hWnd);
        ::DrawText (hDC, L"Testing...", 10, &rect, DT_CENTER);
        ::ReleaseDC (m_hWnd, hDC);
    }

 

posted @ 2015-11-20 17:14  Alex_CC  阅读(347)  评论(0编辑  收藏  举报