У меня есть программа MFC C++, которая изредка врезается на выход ошибки без видимых причин. Мой конкретный запрос:Неверный выход программы: MFC C++
В моей перегрузке InitInstance() существуют различные проверки, а также настройка ресурсов, таких как события и семафоры. Когда пользователь запросит нормальный выход, есть обработчик сообщения OnDestroy(), который закрывает все, включая освобождение ресурсов и т. Д. Этот бит работает нормально.
Проблема возникает, когда одна из проверок в InitInstance() терпит неудачу, и функция возвращает значение 0 (вызывая выход программы). Мой вопрос заключается в следующем: в этом случае OnDestroy() автоматически вызывается для очистки вещей, или мне нужно запустить его непосредственно перед выходом из InitInstance?
Почему бы вам не спросить своего отладчика? Установите контрольную точку в 'OnDestroy()' и посмотрите, что произойдет. Кроме того, процесс не сбой * «без видимых причин» *. Причина становится очевидной, когда вы настраиваете отладчик на разрыв, когда возникает исключение Win32. Не будь беспомощным. – IInspectable
Любая нить или мьютекс в вашей программе, которая выделяет основную программу? Они должны быть закрыты после основных выходов, но есть ошибка MSVC, которая должна быть исправлена вручную. – ark1974
@ ark1974: Когда элемент управления покидает предоставленную пользователем точку входа (она называется 'WinMain' в программе GUI, а не' main'), это в основном не имеет значения, выполняется ли очистка или нет. Процесс вот-вот завершится, и ОС все равно вернет все ресурсы. Не уверен, к какой * "ошибке" * вы имеете в виду. – IInspectable