GDI泄漏问题

时间:2010-11-22 12:44:36

标签: c winapi memory-leaks gdi hdc

我在运行以下GDI代码时遇到内存泄漏:

HDC hdcScreen = GetDC(NULL);
HDC hdcMem = CreateCompatibleDC(hdcScreen); 
HBITMAP hbmpOld = (HBITMAP) SelectObject(hdcMem, hBmp); // apparently here is the leak 

// do something

SelectObject(hdcMem, hbmpOld); //placing the old object back. The return object is handled elseware
DeleteDC(hdcMem);  // after CreateCompatibleDC
ReleaseDC(NULL, hdcScreen); // after GetDC

我已经查看了类似的线程,例如this,但我找不到问题。 任何帮助将不胜感激。

DeleteDC,检查ReleaseDC返回值是否为真(无错误)。

谢谢, 塔尔。

2 个答案:

答案 0 :(得分:4)

解决。 问题是hBmp未正确初始化,因此SelectObject发生了崩溃 - 没有错误,只是函数退出,跳过“//做某事”和发布部分。

答案 1 :(得分:0)

为了将来参考,一个非常有用的免费工具是NirSoft GDIView,它显示每个进程的GDI使用情况,并在运行时跟踪更改(处理泄漏)。因此,您可以在应用程序中执行操作并继续检查GDIView,直到您看到计数器增加,然后重复操作,直到您确定哪一个导致无保护的句柄增加。