Проблема утечки GDI - PullRequest
       19

Проблема утечки GDI

3 голосов
/ 22 ноября 2010

У меня возникают утечки памяти при выполнении следующего кода 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 было проверено как истинное (без ошибок).

Спасибо, Tal.

Ответы [ 2 ]

4 голосов
/ 23 ноября 2010

решаемая. Проблема была в том, что hBmp не был правильно инициализирован, поэтому в SelectObject произошел сбой - ошибки не было, только функция завершилась, пропустив "// сделать что-то" и часть выпусков.

0 голосов
/ 26 декабря 2014

Для дальнейшего использования очень полезным бесплатным инструментом является NirSoft GDIView , который отображает использование GDI для процесса и отслеживает изменения (обрабатывает утечки) во время его работы. Таким образом, вы можете выполнять операции в своем приложении и продолжать проверять GDIView до тех пор, пока не увидите увеличение счетчика, а затем повторять операции до тех пор, пока вы не определите, какая из них вызывает необоснованное увеличение ручки.

...