Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: asvil от Апрель 18, 2011, 17:24



Название: Segfault windows console application in atexit callback on CTRL+C, debug build.
Отправлено: asvil от Апрель 18, 2011, 17:24
Дамы и господа, как никогда требуется Ваша помощь. Скопируйте текст ниже к себе в редактор. Скомпилируйте в debug режиме. Запустите, нажмите CTRL+C и расскажите о своих впечатлениях.

Код:
#include <QtCore>

void myExit()
{
    QObject obj;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    atexit(myExit);
    return a.exec();
}


А теперь вопрос, почему оно падает?


Название: Re: Segfault windows console application in atexit callback on CTRL+C, debug build.
Отправлено: k06a от Апрель 27, 2011, 03:04
Потому что exec() передаёт управление операционной системе.
А сам ждёт от ОС событий и их обрабатывает в "цикле обработки событий".
Таким образом, в момент нажатия Ctrl+C .... творится .... не проверял что ...
Посмотрите такую штуку:
Код:
QtMsgHandler qInstallMsgHandler ( QtMsgHandler handler )
и сигнал:
Код:
void QCoreApplication::aboutToQuit ()


Название: Re: Segfault windows console application in atexit callback on CTRL+C, debug build.
Отправлено: asvil от Апрель 27, 2011, 08:35
Спасибо, но немного не то. Падает приложение в конструкторе QObject на строке 5. Именно для debug режима. Именно в windows.
Сигнал не подходит, нужен callback.