Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 20:39     Не перехватывается исключений #1
C++
1
2
3
4
5
6
7
8
int a;
 
try{
cin >> a;
cout << a / 0 << endl;
}catch(...){
cout << "err" << endl./
}
Добавлено через 11 секунд
Почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valentina
66 / 66 / 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");
}
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 20:49  [ТС]     Не перехватывается исключений #3
Цитата Сообщение от Valentina Посмотреть сообщение
это undefined behavio
Можете поподробнее объяснить?
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 20:58     Не перехватывается исключений #4
Неопределенное поведение. Undefined behavior означает, что стандарт не накладывает каких-либо ограничений. Может случиться все, что угодно.
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:00  [ТС]     Не перехватывается исключений #5
А что тогда такое исключительная ситуация?
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 21:29     Не перехватывается исключений #6
Липпман пишет
Исключение – это аномальное поведение во время выполнения, которое программа может обнаружить, например: деление на 0, выход за границы массива или истощение свободной памяти.
Хотя по стандарту С++ деление на ноль не обрабатывается механизмом обработки исключений.
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:43  [ТС]     Не перехватывается исключений #7
Вообщем, если я правильно понял, то, что деление на ноль не обрабатывается - это БАГ?
Valentina
66 / 66 / 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;
}
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:59  [ТС]     Не перехватывается исключений #9
Ну это же уже Windows средства. Значит, всё-таки, баг?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,866
Записей в блоге: 2
Завершенные тесты: 1
16.07.2013, 21:59     Не перехватывается исключений #10
Цитата Сообщение от bgm123 Посмотреть сообщение
на ноль не обрабатывается - это БАГ?
БАГ, но это БАГ вашей программы, а не что-то другое
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 22:00     Не перехватывается исключений #11
Цитата Сообщение от bgm123 Посмотреть сообщение
Ну это же уже Windows средства. Значит, всё-таки, баг?
да это баг
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 681
16.07.2013, 22:00     Не перехватывается исключений #12
Просто сделайте if да и все.
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 22:01  [ТС]     Не перехватывается исключений #13
Цитата Сообщение от Croessmah Посмотреть сообщение
БАГ, но это БАГ вашей программы, а не что-то другое
Ну насколько я понял механизм обработки исклчюений предназначен для контроля программных исключений в том числе? Не так?

Добавлено через 31 секунду
Цитата Сообщение от Bend3r Посмотреть сообщение
Просто сделайте if да и все
хорошая идея)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 22:09     Не перехватывается исключений
Еще ссылки по теме:

Обработчик исключений C++
Обработка исключений C++
Проверка исключений C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,866
Записей в блоге: 2
Завершенные тесты: 1
16.07.2013, 22:09     Не перехватывается исключений #14
http://www.jdl.co.uk/briefings/divByZeroInCpp.html
Yandex
Объявления
16.07.2013, 22:09     Не перехватывается исключений
Ответ Создать тему

Метки
cout <<
Опции темы

Текущее время: 18:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru