Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Access Violation в ~CMSMask


Автор: 17dufa 8.12.2009, 18:08
после вызова DoModal блок заканчивается и для не динамической переменной диалога вызывается деструктор. Я деструктор не переопределял. Базовый соответственно вызывает деструкторы потомков. При вызове ~CMSMask внутри BOOL CWnd::DestroyWindow() на строке
bResult = m_pCtrlSite->DestroyControl();
получаю Access Violation. 
Копать остальной код на наличие неправильной работы с указателями? Или еще какие варианты есть? До последнего билда, в котором код диалога не правился подобного не было.

Автор: Earnest 9.12.2009, 15:41
А все, конечно, должны знать, кто такой этот твой CMSMask. 
Вряд ли остальной код копать нужно. Скорее dcuj? у тебя что-то неправлиьно с логикой владения и ли времени жизни этого контрола. Вот туда и смотри. Начни со значения m_pCtrlSite - может, там уже усе порушено, вот и violation наступает...
Может, он какой-нибудь delete this на PostNcDestroy вызывает? Можно еще поставить точку прерывания на деструктор контрола и посмотреть, а не дважды ли он приходит, и откуда...

Автор: 17dufa 10.12.2009, 13:28
Earnest, CMSMask не мой. Это ActiveX контрол от Microsofta - Masked Edit Control. Добавлял его через Insert ActiveX Control. Никакого моего кода в деструкторе диалога нет, только мелкософтовский. По указанным точкам покопаюсь, как только смогу запустить программу (сейчас она вообще стала виснуть на входе smile )

Автор: 17dufa 10.12.2009, 16:22
вообщем необъяснимо появившись проблема необъяснимо ушла. видать неудачный check out сделал. сегодня пересобрал потщательнее последнюю версию, проблемы ушли.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)