| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > непонятная ошибка |
| Автор: mrgloom 21.10.2011, 09:07 |
| не могу детектировать ошибку или хотя бы понять откуда она идет. Иногда приложение ведет себя странно, при наведении на кнопки панели управления они пропадают, все что на экране затирается и не перерисовывается. иногда при выводе например красных линий они вдруг почему то становятся черными. с чем могут быть связаны ошибки такого рода? как это можно отлаживать? делать дамп памяти вариант? |
| Автор: Earnest 21.10.2011, 13:35 |
| Может, GDI-ресурсы утекают? Других мыслей нет, только некорректная работа с ресурсами при перерисовке. Должно наблюдаться через некоторое время работы программы. Посмотреть можно через Диспетчер задач. На закладке с процессами включи столбец Объекты GDI и последи за его изменением у своего процесса. Нормальное поведение - сначала нарастает до какого уровня, затем колеблется туда-сюда (при прорисовках, например). Если все время растет - ищи ошибки некорректного освобождения GDI-ресурсов. |
| Автор: mrgloom 21.10.2011, 16:19 |
| да, действительно посмотрел, копится, доходит до 10к и потом все начинает неправильно работать. как то точнее можно отследить где происходит утечка? |
| Автор: mrgloom 21.10.2011, 17:09 | ||
| похоже я не удалял пены. HPEN yellowPen=CreatePen(PS_SOLID, 1, RGB(255,255,0)); HGDIOBJ oldPen=SelectObject(dc,yellowPen); DeleteObject(yellowPen);
не очень понятно зачем старый объект возвращать обратно? |
| Автор: Estranged 21.10.2011, 21:51 | ||||
Чтобы вернуть его на родину вместо удаляемого, причем http://msdn.microsoft.com/en-us/library/dd183539%28v=vs.85%29.aspx, иначе будет плохо:
или:
|
| Автор: Earnest 24.10.2011, 06:41 |
Другими словами, объект, выбранный в контекст, на самом деле не удаляется. Это одна из самых больших засад GDI, которые нужно иметь в виду при написании кода. "Развыбрать" объект можно одним способом - заменить другим такого же типа. Не обязательно старым, для этих целей подходят также stock-объекты. |