Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Gate007 от Июля 21, 2011, 11:18



Название: [Windows]Код завершения консольной программы
Отправлено: Gate007 от Июля 21, 2011, 11:18
Разбираю очередной пример из книги Шлее. Суть примера: создать заведомо проблемный код, и на нем научиться пользоваться отладчиком.
Создан проект типа консольное приложение, код следующий:
Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <stdio.h>
void bug()
{
int n = 3;
int* pn = &n;
delete pn;
}
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
   bug();
   return a.exec();
}
Программа компилится и запускается, но по тычку на кнопку закрыть справа наверху в консоль приложения выдается:
Код:
Запускается C:\qt_projects\Example_3.1\untitled1-build-desktop\debug\untitled1.exe...
C:\qt_projects\Example_3.1\untitled1-build-desktop\debug\untitled1.exe завершился с кодом -1073741510
Отличный от 0 код завершения меня беспокоит. Он не меняется даже если закомментировать "бажный" код.
Подозреваю, что это нормальная реакция, т.к нигде в приложении кнопка закрыть не связана с функцией return a.exec();
Таки можно ли корректно завершать консольное приложение и стоит ли оно того?


Название: Re: [Windows]Код завершения консольной программы
Отправлено: LisandreL от Июля 21, 2011, 11:27
Да, можно:
Код:
#include <QtCore/QCoreApplication>
#include <QTimer>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTimer::singleShot( 5000, &a, SLOT( quit() ) );
    return a.exec();
}


Название: Re: [Windows]Код завершения консольной программы
Отправлено: LisandreL от Июля 21, 2011, 11:31
Also
-1073741510 = 0xc000013a = STATUS_CONTROL_C_EXIT
т.е. принудительное завершение программы по Ctrl+C (видимо закрытие окна консоли крестиком приравнивается именно к этому).


Название: Re: [Windows]Код завершения консольной программы
Отправлено: Gate007 от Июля 21, 2011, 11:40
Also
-1073741510 = 0xc000013a = STATUS_CONTROL_C_EXIT
т.е. принудительное завершение программы по Ctrl+C (видимо закрытие окна консоли крестиком приравнивается именно к этому).
Спасибо, теперь все стало на свои места.


Название: Re: [Windows]Код завершения консольной программы
Отправлено: Fess от Июля 21, 2011, 13:00
0xc000013a = STATUS_CONTROL_C_EXIT
где описание кодов возврата берете?


Название: Re: [Windows]Код завершения консольной программы
Отправлено: LisandreL от Июля 21, 2011, 13:28
где описание кодов возврата берете?
http://msdn.microsoft.com/en-us/library/cc704588(PROT.10).aspx


Название: Re: [Windows]Код завершения консольной программы
Отправлено: Fess от Июля 22, 2011, 08:07
http://msdn.microsoft.com/en-us/library/cc704588(PROT.10).aspx
Точно! Спасибо.
А для linux/mac/maemo/etc что-то отличается? Или это все-таки стандарт?