Доброго времени суток. При закрытии программы, случается, что появляется сообщение о том, что программа выполнила недопустимую операцию и тд по списку. Научите, пожалуйста, как её отловить.
Qt 4.7.4 + QtCreator 2.3.0
Window 7
Копипаст текста ошибки в студию.
Скрин ошибки в файле 2.png
Файл 1.png содержит скрин дебагера сразу после вылета. Красным подчернул два моих метода.
Да приложение многопоточное, но потоки к тому моменту, как происходит вылет, уже отработали, завершились и были удалены (через сигнал fihished и слот deleteLater).
Понимаю, что наверняка, пытаюсь уничтожить то, что уничтожено ранее, но не знаю как это найти.
Я хз, но может
if (d->recursive()) { ...
exception code 0xc0000005 - это попытка залезть в чужую память. Это либо выход за край динамического массива, либо попытка доступа к возвращённому в кучу блоку памяти
судя по всему, объект, на который указывает (-вал) указатель d - капут
ещё вариант (для дебага актуально ) - неинициализированный указатель. он там у тебя не нулевой, а что-нибудь вроде 0xcccccccc
Это 100% попытка доступа к памяти, возвращенной в кучу. Но указатель d, это не моё, это QMutex. Моё подчеркнуто красным, там всего 2 файла.
Эмм... кажется вопрос закрыт. Не совсем понимаю причем тут это.
В общем, создавался отдельный поток и запускался на выполнение не с помощью thread->start(); а напрямую: thread->run();. Заменил второе на первое и все как рукой сняло. Уже полчаса как не могу повторить вылет.
P.S. посоветуйте литературу про потоки на Qt.
а программа не консольная?
Была когда-то консольной. С ней как раз проблем не было, после того как прикрутил ГУИ c треем, вот все и началось.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)