С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 05.09.2013
Сообщений: 45
1

Как работать с try - catch в С++?

13.03.2014, 15:59. Показов 1182. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Подскажите плиз как именно работает try catch? Я попробовал сделать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void f1() {
    int i = 5;
    int j = 0;
    int a = i/j; //вот она - непредвиденная ошибка
}
 
void f2() {
    f1();
}
 
void f3() {
    f2();
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    try {
        f3();
 
    } catch(...) { //как вариант - обрабатываем ВСЕ ошибки
        printf("Exception! Other!!!\n");
    }
}
и нарвался на ошибку т.е. catch не работает.

Насколько я понял из танцев с бубном и изучением различной литературы чтобы сработал catch необходимо в строке, в которой может произойти ошибка, бросить throw. Конкретно в этом примере если в ф-ции f3 ДО вызова ф-ции f2 написать throw 1; и обработку catch(int i) тогда все отлавливается нормально.

Теперь непосредственно вопрос. Существует ли возможность отлова ошибки без throw (я в каком-то блоке НЕ жду ошибки считая что блок надежен но из-за фазы луны и среднестатистической температуры на марсе она все же вылетает и нужно ее отловить) как это сделано в Delphi?

Delphi
1
2
3
4
5
try begin
i = 5/0;
end except begin
print("Ошибка!");
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2014, 15:59
Ответы с готовыми решениями:

Объясните пожалуйста, как работать с try catch и throw
как следует работать с try catch и throw. никак не могу понять как применить их в программе

Перестал работать catch
Такая проблема, есть форма авторизации клиентского приложения на C# для MS Sql server 2014. ...

Конструкция try catch в цикле while. Зацикливается блок catch
Здравствуйте. Столкнулся с проблемой: при попытке запихнуть в цикл конструкцию try catch -...

как работает try, catch
Как работает конструкция try, catch? Если не сложно объясните на не большом примере. А то гугли...

6
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,933
Записей в блоге: 1
13.03.2014, 16:03 2
Потому что это не исключительная ситуация
0
2337 / 1824 / 753
Регистрация: 27.07.2012
Сообщений: 5,398
13.03.2014, 16:09 3
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что это не исключительная ситуация
Почему же. Вот что выдаёт отладчик:
Необработанное исключение в "0x004114f0" в "06 try catch.exe": 0xC0000094: Integer division by zero.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
13.03.2014, 16:23 4
Отладчик - это отладчик. В C++ деление на ноль не является исключением.
0
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,933
Записей в блоге: 1
13.03.2014, 16:26 5
Цитата Сообщение от John Prick Посмотреть сообщение
Вот что выдаёт отладчик:
SEH исключение, каким боком тут исключения C++?

Добавлено через 2 минуты
Цитата Сообщение от kraborak Посмотреть сообщение
Существует ли возможность отлова ошибки без throw
для VC++ http://www.avprog.narod.ru/progs/exceptions.htm и смотрите в сторону EXCEPTION_INT_DIVIDE_BY_ZERO, но лучше всё-таки работать стандартными средствами в данном случае, имхо.
1
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
13.03.2014, 16:31 6
вам бы надо сделать какой-нить class Error , и вызывать его по исключению

C++
1
2
3
4
5
6
7
8
9
int f1() 
{
int i = 5; 
int j = 0; 
if (j==0)
throw Error();  //вот она - непредвиденная ошибка 
else
return  i/j;
}
дальше уже
C++
1
2
3
4
catch(Error &asd)
{
cout<<"Error! j = 0 !";
}
0
1 / 1 / 0
Регистрация: 05.09.2013
Сообщений: 45
13.03.2014, 17:47  [ТС] 7
dzrkot, да, все верно НО я спрашивал немного про другое =) Нельзя ли сделать это без throw т.е. не проверяя все возможные или невозможные варианты в каждой строчке кода а просто обернуть небезопасный блок строк конструкцией try catch (в delphi try except)?

Добавлено через 11 минут
dzrkot, спасибо, это годится) Вариант:
C++
1
2
3
4
5
6
7
__try {
        f3();
 
    } 
    __except(EXCEPTION_EXECUTE_HANDLER) {
        printf("ERROR!!!\n");
    }
работает примерно как нужно НО... VC++ и #include <windows.h> немножечко напрягает

Добавлено через 48 секунд
ех сори, это Croessmah, подсказал =)
0
13.03.2014, 17:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2014, 17:47
Помогаю со студенческими работами здесь

Как избежать try-catch?
делаю программку, в которой понадобилось найти медиану в массиве. порыскал -- нашел вот такой...

Как правильно использовать try catch?
На фотке есть меню. Реализовал всё кроме вывода денег. При выводе должна стоять проверка(например...

как правильно написать try{} Catch{}
Пишу: try { jpg-&gt;LoadFromStream(PicStream); Image1-&gt;Picture-&gt;Graphic =...

Как работает конструкция Try - Catch
есть окно в нем два текстбокса, кнопка и лэбел в который выводится результат деления текстовых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru