BUG: GetDC() ReleaseDC()引起的内存泄漏
调用CWnd::GetDC函数跟CWnd::ReleaseDC函数的代码运行时,会出现 4 个字节的内存泄漏。
Microsoft 已经确认这是在本文开头部分列出的 Microsoft 产品中的缺陷。
若要避免此问题,请使用GetDC方法和ReleaseDC方法的CWnd类版本。使用GetDC函数和ReleaseDC函数。
http://support.microsoft.com/kb/819635/zh-cn
再现现象的步骤
中的方法是从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); }
|=======================================|
| 既然选择了远方,便只顾风雨兼程! |
|=======================================|