Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kraborak
1 / 1 / 0
Регистрация: 05.09.2013
Сообщений: 45
#1

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

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

Доброго времени суток. Подскажите плиз как именно работает 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 15:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как работать с try - catch в С++? (C++):

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

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

Разъясните подробно, как работают Try-catch - C++
Добрый вечер, форумчане! Такая просьба - разъясните нубасу(то бишь мне) подробно как работает try catch throw или киньте ссылки, где это...

Не понимаю как сделать try/catch в программе - C++
в общем, у меня стек заполняется только целочисленным типом данных (int). Но также необходимо сделать исключения для типа double и букв...

Обработка любых исключений в try catch на C++ также как на C# - C++
Есть ли возможность обрабатывать все ошибки в программе на C++, точно также как это сделано на C#? На C# просто помещаешь текст...

Как реализовать проверку типа переменной с помощью try/catch? - C++
Здравствуйте! Я немножко не понял как тут, в С++ работают эти вещи. Вот мне нужно проверить переменную на значение, чтоб проверялась на int...

6
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
13.03.2014, 16:03 #2
Потому что это не исключительная ситуация
0
John Prick
803 / 736 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
13.03.2014, 16:09 #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что это не исключительная ситуация
Почему же. Вот что выдаёт отладчик:
Необработанное исключение в "0x004114f0" в "06 try catch.exe": 0xC0000094: Integer division by zero.
0
castaway
Эксперт С++
4887 / 3022 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
13.03.2014, 16:23 #4
Отладчик - это отладчик. В C++ деление на ноль не является исключением.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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
dzrkot
zzzZZZ...
522 / 352 / 53
Регистрация: 11.09.2013
Сообщений: 2,022
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
kraborak
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 17:47
Привет! Вот еще темы с ответами:

Как передать управление в блок catch после системного исключения (компилятор g++)? - C++
Вот пример: не удаётся это сделать #include &lt;windows.h&gt; #include &lt;stdio.h&gt; //Эта функция- НОВЫЙ обработчик...

Как работать с указателями и как работать с ссылками - C++
Я в книге дочитал до темы указатели и ссылки, не понимаю как работать с указателями и как работать с ссылками. Я прочитал понятия я понимаю...

Try и catch - C++
Пытался сделать простую структуру,чтобы в блоке try задавалось значение переменной x, и если это значение равно,например, 5,то блок catch...

try . catch - C++
можно ли провести данную операцию для функции erase у вектора??? пытался, что-то не получилось: #include &lt;vector&gt; #include &lt;algorithm&gt; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru