我注意到在使用任务管理器时,下面的代码中有一个GDI漏洞。执行此代码的进程中的GDI对象计数每次执行时都会增加1,但是我似乎找不到问题所在。
任何帮助都将不胜感激。
// create new DC based on current
HDC hDC = CreateCompatibleDC(GetDC());
// select a bitmap into the new DC and keep the old one
HGDIOBJ hOldObj = SelectObject (hDC,hBM);
// do somthing here --> 100% no leak here
SomeFunction (hDC);
// select the old object back from whence it came and delete whats returned
DeleteObject (SelectObject (hDC,hOldObj));
// delete the DC
DeleteDC(hDC);
// delete the tmp object
DeleteObject (hOldObj);RM
发布于 2009-01-27 02:39:19
抄袭评论,我没有把它作为答案,因为我不能测试它,我不确定它是否正确,请测试它。
一般来说,嵌套的调用并不是一个好主意
HDC hDC1 = GetDC();
HDC hDC2 = CreateCompatibleDC(hDC1);
.. 而不是
HDC hDC = CreateCompatibleDC(GetDC()); (顺便说一句,在您的代码中,由GetDC返回的HDC并未发布。)
发布于 2009-01-27 02:22:21
确保在从GetDC返回的句柄上调用ReleaseDC而不是DeleteDC。
发布于 2011-11-18 00:58:50
我可以建议deleaker找到并修复泄漏。
https://stackoverflow.com/questions/482083
复制相似问题