Russian Qt Forum
Ноябрь 23, 2024, 11:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Почему не срабатывает блок try?
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Почему не срабатывает блок try? (Прочитано 24692 раз)
a_n_y_a
Гость
Почему не срабатывает блок try?
«
:
Август 19, 2009, 08:36 »
Есть такой код:
#include "iostream"
class A
{
public:
int b;
void Pokaz(){printf("Pokaz\n");};
};
int main()
{
try
{
A *a=0;
a->b=5;
a->Pokaz();
}
catch(...)
{
printf("try\n");
};
};
При выполнении выдает следующее:
[root@localhost ~]# /usr/NULL/Null/Debug/Null
Ошибка сегментирования
[root@localhost ~]#
Почему не срабатывает try?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Почему не срабатывает блок try?
«
Ответ #1 :
Август 19, 2009, 09:10 »
С какими параметрами собрана Qt?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: Почему не срабатывает блок try?
«
Ответ #2 :
Август 19, 2009, 09:27 »
А причем здесь Qt?
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
a_n_y_a
Гость
Re: Почему не срабатывает блок try?
«
Ответ #3 :
Август 19, 2009, 09:30 »
Qt здесь не использовалась, но код с использование Qt в такой же ситуации тоже не работает правильно. В этом примере ошибка выделена в простом коде.
Записан
BRE
Гость
Re: Почему не срабатывает блок try?
«
Ответ #4 :
Август 19, 2009, 09:43 »
А кто сказал, что плюсовый try должен отрабатывать такие исключения?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Почему не срабатывает блок try?
«
Ответ #5 :
Август 19, 2009, 09:45 »
а я чего-то не понимаю, или исключение некому бросать? сегфолт - это системное событие а не результат системного вызова (как при new). Я бы сказал, что это не исключение...
Записан
Winstrol
Гость
Re: Почему не срабатывает блок try?
«
Ответ #6 :
Август 19, 2009, 10:09 »
Цитата: a_n_y_a от Август 19, 2009, 08:36
Почему не срабатывает try?
Под windows разыменование нулевого указателя это так называемое SEH-исключение, а не с++-исключение. Для того, чтобы его ловить в блоке catch, нужно установить функцию транслирующую SEH в с++-исключения с помощью вызова системной _set_se_translator. Примнры кода можно найти поиском по _set_se_translator.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Почему не срабатывает блок try?
«
Ответ #7 :
Август 19, 2009, 11:29 »
Цитата: pastor от Август 19, 2009, 09:27
А причем здесь Qt?
Что-то вспомнилось про ключик -exeption. Ошибся малость.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
a_n_y_a
Гость
Re: Почему не срабатывает блок try?
«
Ответ #8 :
Август 20, 2009, 09:53 »
Посмотрел я в интернете, прошелся поиском по своему линуксу, и что то ничего нет. В интернете есть примеры только для виндов. Что же, под линуксом ничего сделать невозможно?
Записан
denka
Гость
Re: Почему не срабатывает блок try?
«
Ответ #9 :
Август 20, 2009, 10:11 »
Возможно - перед обращением к указателю проверять валидный ли он
Записан
BRE
Гость
Re: Почему не срабатывает блок try?
«
Ответ #10 :
Август 20, 2009, 10:13 »
Цитата: a_n_y_a от Август 20, 2009, 09:53
Посмотрел я в интернете, прошелся поиском по своему линуксу, и что то ничего нет. В интернете есть примеры только для виндов. Что же, под линуксом ничего сделать невозможно?
Почитай про системные сигналы в linux. Для начала man signal.
Записан
a_n_y_a
Гость
Re: Почему не срабатывает блок try?
«
Ответ #11 :
Август 20, 2009, 10:20 »
Цитата: den'ka от Август 20, 2009, 10:11
Возможно - перед обращением к указателю проверять валидный ли он
Вот это то мне и надо, но как это сделать без возникновения исключения? Если возможно, приведи код. Буду очень благодарен.
Записан
ритт
Гость
Re: Почему не срабатывает блок try?
«
Ответ #12 :
Август 20, 2009, 10:44 »
Код:
if (ptr) ptr->doSomething();
Записан
a_n_y_a
Гость
Re: Почему не срабатывает блок try?
«
Ответ #13 :
Август 20, 2009, 12:45 »
Цитата: Константин от Август 20, 2009, 10:44
Код:
if (ptr) ptr->doSomething();
Делаю:
if (ptr) printf("валидный указатель");
else printf("Не валидный указатель");
delete ptr;
printf(Удалили);
При ptr=NULL получаю:
Не валидный указатель
Удалили
При ptr указывающий на самоудалившийся процесс, получаю:
валидный указатель
И все, сообщение "Удалили" я не получаю, программа вылетает на delete ptr.
Как мне проверить, объект удален из памяти или нет? В программе с Qt ptr указывает на процесс.
Записан
Rcus
Гость
Re: Почему не срабатывает блок try?
«
Ответ #14 :
Август 20, 2009, 12:53 »
Классический случай dangling pointer.
Что значит указывает на процесс, всмысле на объект класса QProcess? Тогда QPointer же.
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...