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

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

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

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

04.12.2012, 11:07. Просмотров 284. Ответов 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());
   }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 11:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ПОЧЕМУ std::erxception не ловит ошибку? (C++):

Почему std::string_view МЕДЛЕННЕЕ, чем std::string? - C++
Всем привет! Нужно найти количество уникальных строк в больших текстовых файлах (размером до нескольких гигабайт). Почему в...

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int') - C++
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i = Bullets.begin(); i != Bullets.end(); /**/) В строке цикла вот...

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream - C++
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++ 2005 Express Edition. Образ диска...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri - C++
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

Почему new вызывает std::bad_alloc? - C++
Скомпилил данные исходники в visual studio 2008. Получил ошибку в конструкторе whirlpool(): функция gf8mul умножает многочлены над полем...

STL std::set, std::pair, std::make_pair - C++
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на название темы. Собственно перейдем к нашим баранам: есть...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13228 / 7500 / 845
Регистрация: 27.09.2012
Сообщений: 18,423
Записей в блоге: 3
Завершенные тесты: 1
04.12.2012, 11:11 #2
Цитата Сообщение от dqrest Посмотреть сообщение
Решил изучить try, catch/Объясните плиз.Не пойму, почему catch не ловит ошибку?
а что он у Вас должен поймать? Выход за пределы массива?
0
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 114
04.12.2012, 11:12  [ТС] #3
да. Он должен у меня поймать выход за пределы массива. А он мне штампует разные цифры!!!
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
04.12.2012, 11:15 #4
dqrest, так в блоке try нечего ловить, bad_alloc если только, но это крайне маловероятно. out_of_range может выбросить метод at в контейнерах STL (std::vector, например), доступ к элементам массива в принципе не может выбросить никакого исключения.
1
Croessmah
Эксперт CЭксперт С++
13228 / 7500 / 845
Регистрация: 27.09.2012
Сообщений: 18,423
Записей в блоге: 3
Завершенные тесты: 1
04.12.2012, 11:16 #5
Цитата Сообщение от dqrest Посмотреть сообщение
да. Он должен у меня поймать выход за пределы массива. А он мне штампует разные цифры!!!
Выход за пределы массива - Ваша головная боль.
Уже обсуждалось: min-gw try-catch почемуто не работает
1
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
04.12.2012, 11:18 #6
dqrest, кстати, std::out_of_range - наследник std::exception, так что второй блок catch - мёртвый код. И ловят обычно по ссылке на константу.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
04.12.2012, 11:34 #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

0
Croessmah
Эксперт CЭксперт С++
13228 / 7500 / 845
Регистрация: 27.09.2012
Сообщений: 18,423
Записей в блоге: 3
Завершенные тесты: 1
04.12.2012, 11:34 #8
Обработка исключений в Visual C++
Пункт 1.2
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2012, 11:34
Привет! Вот еще темы с ответами:

Как исправить ошибку с std::cin - C++
помогите у меня пропускает последующие вводы если вводишь знак или букву вот код std::cout&lt;&lt;&quot;A: &quot;; std::cin&gt;&gt;AA; ...

Грамотно обработать ошибку std::exception - C++
struct Node { Node(int data): data_(data) {} int data_; // полезная часть списка Node* next; // указатель на следующий...

Почему gcc ругается на std::cout? - C++
Проблема такая: работаю на Mac, установил Xcode, запускаю gcc в командной строке. Имеется элементарная программка: #include...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами - C++
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.12.2012, 11:34
Ответ Создать тему
Опции темы

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