症状 调用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); }