Russian Qt Forum
Ноябрь 23, 2024, 14:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Windows]Код завершения консольной программы  (Прочитано 8911 раз)
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();
Таки можно ли корректно завершать консольное приложение и стоит ли оно того?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июль 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();
}
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Июль 21, 2011, 11:31 »

Also
-1073741510 = 0xc000013a = STATUS_CONTROL_C_EXIT
т.е. принудительное завершение программы по Ctrl+C (видимо закрытие окна консоли крестиком приравнивается именно к этому).
Записан
Gate007
Гость
« Ответ #3 : Июль 21, 2011, 11:40 »

Also
-1073741510 = 0xc000013a = STATUS_CONTROL_C_EXIT
т.е. принудительное завершение программы по Ctrl+C (видимо закрытие окна консоли крестиком приравнивается именно к этому).
Спасибо, теперь все стало на свои места.
Записан
Fess
Гость
« Ответ #4 : Июль 21, 2011, 13:00 »

0xc000013a = STATUS_CONTROL_C_EXIT
где описание кодов возврата берете?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Июль 21, 2011, 13:28 »

где описание кодов возврата берете?
http://msdn.microsoft.com/en-us/library/cc704588(PROT.10).aspx
Записан
Fess
Гость
« Ответ #6 : Июль 22, 2011, 08:07 »

Точно! Спасибо.
А для linux/mac/maemo/etc что-то отличается? Или это все-таки стандарт?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.185 секунд. Запросов: 23.