Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
bgm123
41 / 41 / 27
Регистрация: 29.01.2013
Сообщений: 277
1

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

16.07.2013, 20:39. Просмотров 616. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 20:39
Ответы с готовыми решениями:

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

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

не перехватывается исключение, хоть по книге c++ за 21 день и должно
#include &lt;exception&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class...

Обработка исключений. Как организовать общий обработчик исключений?
У меня есть последовательность вызова методов для внесения данных в таблицу БД. Сам метод...

OnKeyDown формы перехватывается кнопкой
У меня есть форма(C++Builder 6),с обработчиком событий OnKeyDown, так же на этой форме размещена...

13
Valentina
70 / 70 / 13
Регистрация: 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
41 / 41 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 20:49  [ТС] 3
Цитата Сообщение от Valentina Посмотреть сообщение
это undefined behavio
Можете поподробнее объяснить?
0
Valentina
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 20:58 4
Неопределенное поведение. Undefined behavior означает, что стандарт не накладывает каких-либо ограничений. Может случиться все, что угодно.
1
bgm123
41 / 41 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:00  [ТС] 5
А что тогда такое исключительная ситуация?
0
Valentina
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 21:29 6
Липпман пишет
Исключение – это аномальное поведение во время выполнения, которое программа может обнаружить, например: деление на 0, выход за границы массива или истощение свободной памяти.
Хотя по стандарту С++ деление на ноль не обрабатывается механизмом обработки исключений.
0
bgm123
41 / 41 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:43  [ТС] 7
Вообщем, если я правильно понял, то, что деление на ноль не обрабатывается - это БАГ?
0
Valentina
70 / 70 / 13
Регистрация: 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
41 / 41 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:59  [ТС] 9
Ну это же уже Windows средства. Значит, всё-таки, баг?
0
Croessmah
++Ͻ
16155 / 9246 / 1774
Регистрация: 27.09.2012
Сообщений: 22,794
Записей в блоге: 2
Завершенные тесты: 2
16.07.2013, 21:59 10
Цитата Сообщение от bgm123 Посмотреть сообщение
на ноль не обрабатывается - это БАГ?
БАГ, но это БАГ вашей программы, а не что-то другое
0
Valentina
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 22:00 11
Цитата Сообщение от bgm123 Посмотреть сообщение
Ну это же уже Windows средства. Значит, всё-таки, баг?
да это баг
1
Bend3r
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
16.07.2013, 22:00 12
Просто сделайте if да и все.
1
bgm123
41 / 41 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 22:01  [ТС] 13
Цитата Сообщение от Croessmah Посмотреть сообщение
БАГ, но это БАГ вашей программы, а не что-то другое
Ну насколько я понял механизм обработки исклчюений предназначен для контроля программных исключений в том числе? Не так?

Добавлено через 31 секунду
Цитата Сообщение от Bend3r Посмотреть сообщение
Просто сделайте if да и все
хорошая идея)
0
Croessmah
++Ͻ
16155 / 9246 / 1774
Регистрация: 27.09.2012
Сообщений: 22,794
Записей в блоге: 2
Завершенные тесты: 2
16.07.2013, 22:09 14
http://www.jdl.co.uk/briefings/divByZeroInCpp.html
1
16.07.2013, 22:09
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 22:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Буфер обмена, перехватывается микрософтовскими программами
Привет форумчане, суть вопроса состоит в том, что моя программа, перехватывает картинку с веб...

Почему в async void методе не перехватывается исключение?
Привет! В ряде статей читал о том, что в подобном случае исключение не перехватывается и...

При попытка зайти на любой сайт антишпионом перехватывается сайт partner-pop.men. Как убрать этот сайт?
При попытка зайти на любой сайт через Гугл Хром антишпионом Антимальварэ-байтс перехватывается сайт...


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

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

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