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

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

Войти
Регистрация
Восстановить пароль
 
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 114
#1

ПОЧЕМУ std::erxception не ловит ошибку? - C++

04.12.2012, 11:07. Просмотров 273. Ответов 7
Метки нет (Все метки)

Решил изучить try, catch/Объясните плиз.Не пойму, почему catch не ловит ошибку?ПРогаю на MSVS 2008/
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdexcept>
#include <stdio.h>
using namespace std;
int main(int argc, char *argv[])
{
   int *p;
   try
   {
      p=new int[1];
      for(int i=0;i<10;i++)
          printf("%d ",  p[i]);
   }
   catch(exception &e)
   { 
      printf("%s",e.what());
   }
   catch(out_of_range &e)
   { 
      printf("%s",e.what());
   }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12727 / 7187 / 802
Регистрация: 27.09.2012
Сообщений: 17,727
Записей в блоге: 2
Завершенные тесты: 1
04.12.2012, 11:11     ПОЧЕМУ std::erxception не ловит ошибку? #2
Цитата Сообщение от dqrest Посмотреть сообщение
Решил изучить try, catch/Объясните плиз.Не пойму, почему catch не ловит ошибку?
а что он у Вас должен поймать? Выход за пределы массива?
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 114
04.12.2012, 11:12  [ТС]     ПОЧЕМУ std::erxception не ловит ошибку? #3
да. Он должен у меня поймать выход за пределы массива. А он мне штампует разные цифры!!!
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
04.12.2012, 11:15     ПОЧЕМУ std::erxception не ловит ошибку? #4
dqrest, так в блоке try нечего ловить, bad_alloc если только, но это крайне маловероятно. out_of_range может выбросить метод at в контейнерах STL (std::vector, например), доступ к элементам массива в принципе не может выбросить никакого исключения.
Croessmah
Модератор
Эксперт CЭксперт С++
12727 / 7187 / 802
Регистрация: 27.09.2012
Сообщений: 17,727
Записей в блоге: 2
Завершенные тесты: 1
04.12.2012, 11:16     ПОЧЕМУ std::erxception не ловит ошибку? #5
Цитата Сообщение от dqrest Посмотреть сообщение
да. Он должен у меня поймать выход за пределы массива. А он мне штампует разные цифры!!!
Выход за пределы массива - Ваша головная боль.
Уже обсуждалось: min-gw try-catch почемуто не работает
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
04.12.2012, 11:18     ПОЧЕМУ std::erxception не ловит ошибку? #6
dqrest, кстати, std::out_of_range - наследник std::exception, так что второй блок catch - мёртвый код. И ловят обычно по ссылке на константу.
MrGluck
Ворчун
Эксперт CЭксперт С++
6432 / 3630 / 450
Регистрация: 29.11.2010
Сообщений: 9,591
04.12.2012, 11:34     ПОЧЕМУ std::erxception не ловит ошибку? #7
This class is designed so that any program, not just the elements of the standard library, can throw it as an exception. Several members of vector, deque, string and bitset throw this error on an out-of-range error.
http://www.cplusplus.com/reference/s.../out_of_range/
1) только данные контейнеры кидают этот ексепшн по-умолчанию.
2) out_of_range не словился бы в любом случае, т.к. его прекрывает блок catch(exception &e).
3) Понятно, что stl кидают throw автоматически, в массиве кто throw кидать будет?
4) выход за рамки массива не контролируется

Не по теме:

Еще одна причина использовать vector

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2012, 11:34     ПОЧЕМУ std::erxception не ловит ошибку?
Еще ссылки по теме:

C++ Разобраться почему не компилируется код (использование std::bitset)
Почему опытные программисты не определяют пространство имен std? C++
C++ Почему объект типа std::vector не читается из потока?
C++ Почему с помощью std::cin не получается считать с клавиатуры массив пользовательского типа?
C++ Почему повторяющиеся символы заданной строки не выводятся на консоль? (алгоритм std::adjacent_find)

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12727 / 7187 / 802
Регистрация: 27.09.2012
Сообщений: 17,727
Записей в блоге: 2
Завершенные тесты: 1
04.12.2012, 11:34     ПОЧЕМУ std::erxception не ловит ошибку? #8
Обработка исключений в Visual C++
Пункт 1.2
Yandex
Объявления
04.12.2012, 11:34     ПОЧЕМУ std::erxception не ловит ошибку?
Ответ Создать тему
Опции темы

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