4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
1 | |
Коды исключений05.06.2012, 06:58. Показов 1946. Ответов 16
Метки нет (Все метки)
Какие ещё, кроме std::bad_alloc, есть коды исключений? Содержит ли исключение информацию о месте своего возникновения? А о конкретной операции, из-за которой оно возникло? А что конкретно не так с этой операцией?
0
|
05.06.2012, 06:58 | |
Ответы с готовыми решениями:
16
Обработка исключений с пмощью структурированной обработки исключений Обработка исключений Обработка исключений класс исключений |
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||||||
05.06.2012, 07:26 | 2 | |||||
Какие еще коды? bad_alloc - это класс. И "выбрасываем" мы объект этого класса при определенных условиях. Если хотим передать инфу через объект, нужно что бы этот объект хранил эту инфу. Можно сделать записать информацию через конструктор непосредственно при выбросе.
Вот пример передачи инфы:
0
|
Higher
|
|
05.06.2012, 07:28 | 3 |
2
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
05.06.2012, 09:43 [ТС] | 4 |
А в чём разница между
Добавлено через 7 минут При чём здесь свой throw? Когда гога предсказуема, её и без исключений легко поймать и инфа в лог перед throw попадёт. А вот как быть, если длинный расчёт и в любом месте может попасться значение вне области определений, типа -1 для корня квадратного, или двойки для арксинуса, выход за границу массива, или ещё какая пакость? И как потом узнать, в каком месте гога? Особенно если перед ней пара миллиардов вызов того же самого, но без гоги и не по счётчику. Добавлено через 1 минуту В исключении new, умеющий бросать свою исклюкаку. Блеск и треск!
0
|
Higher
|
||||||
05.06.2012, 09:46 | 5 | |||||
Вроде overflow/underflow, только для вещественных типов.
Ну, например, это исключение возбудится, если вы попробуете вызвать vector::resize с слишком большим аргументом(больше, чем vector::max_size) То же, что и overflow, только наоборот. Например
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
05.06.2012, 09:50 [ТС] | 6 |
чем они от остальных отличаются я и не спрашиваю. Мне интересно, что они означают. И, если это не стек, то что означают оба.
Добавлено через 1 минуту Всё таки не понятно, чем отличается std::range_error от std::out_of_range.
0
|
Higher
|
|
05.06.2012, 09:57 | 7 |
Выход за границы вещественного типа.
Что может его генерировать в STL - не знаю, не встречал. Выход за границы массива(к примеру, генерируется методом at у вектора и стринга).
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
05.06.2012, 10:37 [ТС] | 8 |
Эйси. Но его зназвание ни откуда не вытекает и больше ни где не участвует, догадаться не возможно. Значит класс с кодированным названием. То есть код.
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||
05.06.2012, 13:21 | 9 | |||||
Утечка памяти.
Исключения желательно перехватывать всегда только по ссылке.
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
05.06.2012, 13:59 [ТС] | 10 |
откуда?
Добавлено через 3 минуты А то и значит, в каком тексте он прописан. В своём - не проблема вывести в лог всю инфу и только потом бросить, в вызываемом - вообще нельзя трогать ни само исключение, ни бросалку. Добавлено через 2 минуты Ну посмотрел я. И что? А если 10 вызываемых функций может бросать одни и те же и каждая в сотне разных мест? Как понять, какой из тысячи вызовов бросает? Хорошо, когда можно коментить куски. А если нет?
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||
05.06.2012, 15:14 | 12 | |||||
new есть, delete нет. Каждый раз при генерации исключения и его обработке память будет выделяться без освобождения.
Исключение можно бросить повторно
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
05.06.2012, 15:54 [ТС] | 13 | |||||
И чем это поможет?
А в wat дописать delete []? Но вот если new сам бросит исклюкаку...
0
|
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 11
|
||||||
05.06.2012, 15:54 | 14 | |||||
Как называется исключение, когда в переменную добавляется пустой Edit??
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
05.06.2012, 15:55 [ТС] | 15 |
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
06.06.2012, 21:39 | 16 |
Я честно говоря не совсем понял, что ты хочешь получить в конечном итоге... Если тебя интересует обработка каждой отдельной функции с помощью try\catch, см. здесь
...вызовится std::teminate(). Вообще, на мой взгляд классы обработки исключений не должны сами выбрасывать исключения, тем не менее многие стандартные классы используют std::string, который точно так же может бросить std::bad_alloc. Подобные вещи естественно необходимо учитывать.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
07.06.2012, 06:58 [ТС] | 17 |
Что не понятного? Есть тело моей функции, в ней много вызовов функций, которые писал не я и они могут быть уже собраны в натив, любая из них может бросить исключение и какая то из них его бросила, надо определить, в какой строке моего исходного кода и с какими параметрами была вызвана функция, бросиывшая исключение. Корень и арксинус приведены только как примеры ограничения на область определения, настоящие функции могут отличаться, имея это же свойство, а исключение std::invalid_argument бросать программно.
0
|
07.06.2012, 06:58 | |
07.06.2012, 06:58 | |
Помогаю со студенческими работами здесь
17
Обработка исключений Обработка исключений Обработка исключений Обработка исключений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |