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

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

Войти
Регистрация
Восстановить пароль
 
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
#1

Не перехватывается исключений - C++

16.07.2013, 20:39. Просмотров 491. Ответов 13

C++
1
2
3
4
5
6
7
8
int a;
 
try{
cin >> a;
cout << a / 0 << endl;
}catch(...){
cout << "err" << endl./
}
Добавлено через 11 секунд
Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 20:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не перехватывается исключений (C++):

почему не перехватывается исключение типа double - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstring&gt; using namespace std; void obrob(int a) { try { ...

Обработка исключений с пмощью структурированной обработки исключений - C++
Есть функция, которая определенным образом работает с файлами,но при работе с файлами &quot;не подходящего&quot; типа вызывается необработанное...

Обработка исключений - C++
Подскажите пожалуйста как продолжить выполнение программы после срабатывания оператора catch. catch завершает программу, но ее нужно...

Обработка исключений - C++
что то я не пойму а что в плюсах нельзя разве сделать что то типа: try { ... } catch (int) { ... }

Обработка исключений - C++
класс B является производным от абстрактного класса А. Определить обработчик исключительной ситуации при преобразовании указателя на класс...

Обработка исключений - C++
Есть вопрос по заданию. С клавиатуры вводится номер ошибочной ситуации. В зависимости от того, какой номер введен, сгенерировать...

13
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 20:46 #2
Деление на 0 — это undefined behavior, а не исключительная ситуация. Его нельзя обработать, его можно только предотвратить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdexcept>
#include <string>
#include <iostream>
#include <ostream>
 
int checked_divide(int numerator, int denominator)
{
  if (0 == denominator) throw std::domain_error("Division by zero");
  return numerator / denominator;
}
 
int main()
{
  try
  {
    int p = 0;
    int i = checked_divide(5, p);
  }
  catch (const std::exception& e)
  {
    std::cout << "Error: " << e.what() << std::endl;
  }
  system("pause");
}
0
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 20:49  [ТС] #3
Цитата Сообщение от Valentina Посмотреть сообщение
это undefined behavio
Можете поподробнее объяснить?
0
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 20:58 #4
Неопределенное поведение. Undefined behavior означает, что стандарт не накладывает каких-либо ограничений. Может случиться все, что угодно.
1
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:00  [ТС] #5
А что тогда такое исключительная ситуация?
0
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 21:29 #6
Липпман пишет
Исключение – это аномальное поведение во время выполнения, которое программа может обнаружить, например: деление на 0, выход за границы массива или истощение свободной памяти.
Хотя по стандарту С++ деление на ноль не обрабатывается механизмом обработки исключений.
0
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:43  [ТС] #7
Вообщем, если я правильно понял, то, что деление на ноль не обрабатывается - это БАГ?
0
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 21:54 #8
нашла как можна обработать исключение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<windows.h>
 
int main(){
    int a,b,c;
    std::cin>>a>>b;
    __try {
        c=a/b;
        std::cout<<c;
    }__except (EXCEPTION_EXECUTE_HANDLER) {
        std::cout<<"exception\n";
    }
    system("pause");
    return 0;
}
1
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:59  [ТС] #9
Ну это же уже Windows средства. Значит, всё-таки, баг?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
16.07.2013, 21:59 #10
Цитата Сообщение от bgm123 Посмотреть сообщение
на ноль не обрабатывается - это БАГ?
БАГ, но это БАГ вашей программы, а не что-то другое
0
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 22:00 #11
Цитата Сообщение от bgm123 Посмотреть сообщение
Ну это же уже Windows средства. Значит, всё-таки, баг?
да это баг
1
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
16.07.2013, 22:00 #12
Просто сделайте if да и все.
1
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 22:01  [ТС] #13
Цитата Сообщение от Croessmah Посмотреть сообщение
БАГ, но это БАГ вашей программы, а не что-то другое
Ну насколько я понял механизм обработки исклчюений предназначен для контроля программных исключений в том числе? Не так?

Добавлено через 31 секунду
Цитата Сообщение от Bend3r Посмотреть сообщение
Просто сделайте if да и все
хорошая идея)
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
16.07.2013, 22:09 #14
http://www.jdl.co.uk/briefings/divByZeroInCpp.html
1
16.07.2013, 22:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 22:09
Привет! Вот еще темы с ответами:

Обработка исключений - C++
Как в блоке Try...Catch... обработать необработанное исключение по адресу? Что необходимо использовать в параметрах catch?

Трансляция исключений - C++
Дайте пожалуйста простенький пример, где я ловлю исключение и кидаю его через throw на еще один обработчик catch

Обработка исключений - C++
Есть код программы по поиску совершенных чисел а интервале от a до n. #include &lt;iostream&gt; using namespace std; int...

Обработка исключений - C++
Добрый день! Столкнулся с такой проблемой. У меня есть класс class MyClass { public: MyClass(/* какие то параметры*/); ...


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

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

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