Приложение остановлено так как оно получило сигнал от операционной системы sigsegv qt
Перейти к содержимому

Приложение остановлено так как оно получило сигнал от операционной системы sigsegv qt

  • автор:

Не работает программа на Qt (решено)

Отлаживать не могу, т.к. выполнение не доходит по первого брейкпоинта в самой первой строке.
В режиме отладки появляется следующее сообщение:

Приложение остановлено, т.к. оно получило сигнал от операционной системы.
Сигнал: SIGSEGV
Назначение: Segmentation fault

#1
13:33, 27 июля 2011

8 строка, 14й символ.

ЗЫ.
Закомментируй всё что есть в main, закомментируй все объекты, создаваемые до вызова main — проверь, запускается ли без ошибок, если ошибка пропала, — раскомменчивай частями и проверяй не появится ли ошибка опять.

#2
13:45, 27 июля 2011

Спасибо, помогло! Только я не могу понять, почему отладка не работала? Например, уже ставил контрольную точку на первой строке в main.

#3
13:48, 27 июля 2011

evgsek
> Например, уже ставил контрольную точку на первой строке в main.

Объекты в глобальном пространстве имен инициализируются до вызова main. Если какой-нибудь из них при этом кинул исключение, — в main управление никогда не перейдёт.

#4
13:52, 27 июля 2011

Спасибо большое, теперь все стало ясно.

Опять SIGSEGV Segmentation fault

Знаю, что такие ошибки у многих, но понять почему они возникают у меня не могу.

Во время отладки вылетает сообщение:

Приложение остановлено, так как оно получило сигнал от операционной системы.
Сигнал:
SIGSEGV
Назначение:
Segmentation fault

Сообщение вылетает на 9 строке в этом конструкторе, причем проблема не в сигнале, а в слоте.

1 2 3 4 5 6 7 8 9 10 11
MainClass::MainClass(QObject *parent) : QObject(parent) { ChoseDialog *cd = new ChoseDialog(); GameWidget *gw = new GameWidget(); Judge *j = new Judge(); cd->show(); connect(cd->Button_X, SIGNAL(click()),j,SLOT(player_X())); connect(cd->Button_0, SIGNAL(clicked()),j,SLOT(player_0())); }

Вот как Выглядит MainClass

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
class MainClass : public QObject { Q_OBJECT public: explicit MainClass(QObject *parent = 0); signals: public slots: private: Judge *j; ChoseDialog *cd; GameWidget *gw; };
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
class ChoseDialog : public QDialog { Q_OBJECT public: ChoseDialog(QWidget *parent = 0); QPushButton* Button_X; QPushButton* Button_0; signals: public slots: private: QBoxLayout* Layout_Chose_1; QBoxLayout* Layout_Chose_2; QBoxLayout* Layout_Chose_3; QLabel* Label_Chose; };
1 2 3 4 5 6 7 8 9 10 11 12 13 14
class Judge : public QObject { Q_OBJECT public: explicit Judge(QObject *parent = 0); private: bool player; signals: public slots: void Player_X(); void Player_0(); };
1 2 3 4
void Judge::Player_X() { player=1; }

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

SIGSEGV (Segmentation Fault). Работоспособность на других ПК
Работало всё нормально. Но перенес проект на другой компьютер и компилятор стал находить это.

SIGSEGV.segmentation fault. Оператор бинарного сдвига
Добрый день. Тут такая проблема. В режиме компиляции программа аварийно завершается. Если запускать.

При выходе из функции падает приложение SIGSEGV Segmentation fault
Работаю в QtCreator. При выходе из функции падает приложение с ошибкой SIGSEGV Segmentation fault.

SIGSEGV Segment fault QTableWidget
В этом участке когда вылетает ошибка SIGSEGV Segment fault. Point MainWindow::serchNextPoint(Point.

596 / 396 / 79
Регистрация: 23.10.2013
Сообщений: 1,143

Зачем вы объявляете указатели в конструкторе, если они у вас уже объявлены в хидере?
Нужно исправить так:

1 2 3 4 5 6 7 8 9 10 11
MainClass::MainClass(QObject *parent) : QObject(parent) { cd = new ChoseDialog(); gw = new GameWidget(); j = new Judge(); cd->show(); connect(cd->Button_X, SIGNAL(click()),j,SLOT(player_X())); connect(cd->Button_0, SIGNAL(clicked()),j,SLOT(player_0())); }

Форум русскоязычного сообщества Ubuntu

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

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Приложение остановлено так как оно получило сигнал от операционной системы sigsegv qt

Добрый вечер!
Проект нормально компилится в Qt, хочу запустить в режиме отладки, при запуске получаю следующее:

Приложение остановлено, так как оно получило сигнал от операционной системы.
Сигнал: SIGSEGV
Назначение: Segmentation fault.

При этом в VS2005 все нормально в режиме отладки.
В чем может быть причина?

Re: Отладка в Qt

От: romankr
Дата: 27.02.12 14:32
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Добрый вечер!
А>Проект нормально компилится в Qt, хочу запустить в режиме отладки, при запуске получаю следующее:

А>Приложение остановлено, так как оно получило сигнал от операционной системы.
А>Сигнал: SIGSEGV
А>Назначение: Segmentation fault.

А>При этом в VS2005 все нормально в режиме отладки.
А>В чем может быть причина?

Сегфолт любит вылазить при проблемах с подключаемыми dll (проверьте версии самих qt-библиотек и MSVCRT). А вообще, можно попробовать детальнее посмотреть дебаггером место сегфолта.

Re: Отладка в Qt

От: velkin http://blogs.rsdn.org/effective/
Дата: 27.02.12 15:36
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Добрый вечер!
А>Проект нормально компилится в Qt, хочу запустить в режиме отладки, при запуске получаю следующее:

А>Приложение остановлено, так как оно получило сигнал от операционной системы.
А>Сигнал: SIGSEGV
А>Назначение: Segmentation fault.

Ошибка сегментации (англ. Segmentation fault или сокращённо segfault) — ошибка программного обеспечения, возникающая при попытке обращения к недоступным для записи участкам памяти либо при попытке изменения памяти запрещённым способом.

А>При этом в VS2005 все нормально в режиме отладки.

Без разницы, если сборка официальная (например, с mingw), значит дело в программе. VS 2005 очень лояльна в этом плане, многое не запрещает, но это не значит, что программа написана правильно.

А>В чем может быть причина?

Мало информации, по аналогии «А у меня автомобиль не ездит, в чём может быть причина?»

Прочти википедию об ошибке сегментации. Запусти трассировку, если надо поставь точки прерывания, найди в какой строчке возникает ошибка. Она ведь не размыта, вот у тебя всё хорошо, следующий шаг, и segfault. Место определяется очень точно. И если не получится понять самостоятельно в чём там дело, тогда надо публиковать код. Но как бы общая идея сводится к тому, что твоя программа неправильно обращается к памяти. А там уже может быть всё что угодно, указатель на несуществующий объект, обращение не из того потока, и так далее.

Re[2]: Отладка в Qt

От: Аноним
Дата: 27.02.12 16:58
Оценка:

Здравствуйте, velkin & romankr, Вы писали:

Хочу сразу сказать — приложение отлично работает собранное как в vs2005, так и в mingw. Точку останова ставлю сразу на первой строке в main. Я просто не пойму если ошибка сегментации — так программа вообще не должна работать!

V>Сегфолт любит вылазить при проблемах с подключаемыми dll (проверьте версии самих qt-библиотек и MSVCRT). А вообще, можно попробовать детальнее посмотреть дебаггером место сегфолта.

dll-не использую, «чистый» проект с++, слинковано с 5 стат.библиотеками, которые в свою очередь, также собраны mingw.

читал — бегло ничего подобного нет.

А>>При этом в VS2005 все нормально в режиме отладки.

V>Без разницы, если сборка официальная (например, с mingw), значит дело в программе. VS 2005 очень лояльна в этом плане, многое не запрещает, но это не значит, что программа написана правильно.

программа 2-е сутки тестируется, лопатит тонну информации — без сбоев, а я ее в отладочной версии даже запустить не могу!

V>Мало информации, по аналогии «А у меня автомобиль не ездит, в чём может быть причина?»

согласен, я только пересел на Qt, вернее только пытаюсь. программа достаточно большая, даже не знаю, что выкладывать то

V>Прочти википедию об ошибке сегментации. Запусти трассировку, если надо поставь точки прерывания, найди в какой строчке возникает ошибка.

так я и не могу трассировку запустить!

Re[3]: Отладка в Qt

От: velkin http://blogs.rsdn.org/effective/
Дата: 27.02.12 18:32
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, velkin & romankr, Вы писали:

А>Хочу сразу сказать — приложение отлично работает собранное как в vs2005, так и в mingw. Точку останова ставлю сразу на первой строке в main. Я просто не пойму если ошибка сегментации — так программа вообще не должна работать!

Почему не должна, в некоторых случаях очень даже должна.

А>dll-не использую, «чистый» проект с++, слинковано с 5 стат.библиотеками, которые в свою очередь, также собраны mingw.

Автор: velkin
Дата: 26.02.12

, там был вопрос, как собрать статическую версию Qt, да ещё чтобы были исключения. Включил флаг -exceptions в configure.exe, проект в дебаге сразу стал вылетать с segmentation fault, причём в релизе отрабатывал исключение за милую душу. Чтобы он и в дебаге с отладчиком нормально работал и отвязался от библиотеки mingwm10.dll, убрал -mthreads. Так что ещё неизвестно, как у тебя скомпилированы эти 5 библиотек вместе с Qt. Я потому и упомянул про официальную сборку, они в этом не косячат, и если вылетел segfault, то хотя бы об используемых библиотеках думать не надо, и можно сосредоточиться на багах своей программы.

Re[3]: Отладка в Qt

От: velkin http://blogs.rsdn.org/effective/
Дата: 27.02.12 19:22
Оценка:

Здравствуйте, Аноним, Вы писали:

А>так я и не могу трассировку запустить!

Ещё вспомнил, если не можешь запустить режим отладки, тогда последовательно отключай библиотеки и код их использующий. Или наоборот, проверь, вылетает ли у тебя чистый Qt в режиме отладки или нет, а потом добавляй библиотеки. Всё равно надо как-то определить на каком этапе происходит segfault.

Re: Отладка в Qt

От: Steamus
Дата: 28.02.12 07:17
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Добрый вечер!
А>Проект нормально компилится в Qt, хочу запустить в режиме отладки, при запуске получаю следующее:

А>Приложение остановлено, так как оно получило сигнал от операционной системы.
А>Сигнал: SIGSEGV
А>Назначение: Segmentation fault.

А>При этом в VS2005 все нормально в режиме отладки.
А>В чем может быть причина?

Была похожая ситуация. Отладчик не стартовал, а сваливался и показывал ассемблерный код. Точное сообщение уже не помню (под Win XP дело было). Причина была в сервисе аудио-карты под названием HsMgr.exe. Запущен он как системный сервис и его удаление позволило отладчику работать. Программа была простой, никакого отношения к работе с аудио не имела. Вывалиливалась в режиме отладки сразу на старте.

. HsMgr.exe (32-bit) and HsMgr64.exe (64-bit) are services which provide the GX2.0 features. Under Vista, they also enable Direct sound 2D/3D/EAX for applications. So it is essential to have them running on your system. On older drivers, these files were named [CMGxMon.exe] and [CMGxMon64.exe]. Windows Vista tends to block some .EXE or .DLL files in ZIP files for security issues. This may cause program to stop responding, or Windows Vista may prompt you for permission to run these programs during boot up.

Re[2]: Отладка в Qt

От: velkin http://blogs.rsdn.org/effective/
Дата: 28.02.12 15:05
Оценка:

Здравствуйте, Steamus, Вы писали:

S>Здравствуйте, Аноним, Вы писали:
S>Была похожая ситуация. Отладчик не стартовал, а сваливался и показывал ассемблерный код. Точное сообщение уже не помню (под Win XP дело было). Причина была в сервисе аудио-карты под названием HsMgr.exe. Запущен он как системный сервис и его удаление позволило отладчику работать. Программа была простой, никакого отношения к работе с аудио не имела. Вывалиливалась в режиме отладки сразу на старте.

Под WinXP у меня Qt подобным образом отваливался из-за нового BitDefender’а, пришлось его снести. Думаю список нежелательных программ этим не ограничивается.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *