38 / 38 / 4
Регистрация: 03.09.2011
Сообщений: 279
|
|
1 | |
Блок try-catch30.12.2011, 00:40. Показов 5465. Ответов 12
Метки нет (Все метки)
В некоторых программах он хорошо работает и в блоке catch выводит то что написал, а в некоторых среда VS говорит "Необработанное исключение по адресу...". В чем может быть проблема?
Добавлено через 4 минуты Протестил, проблема была в неполном блоке try. Вопрос, как знать каков должен быть блок, то есть, что туда должно входить?
0
|
30.12.2011, 00:40 | |
Ответы с готовыми решениями:
12
Не работает блок catch Блок try-catch и ввод Блок try catch жрет память Работает ли указатель на базовый класс исключения, когда попадает в блок catch |
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|
30.12.2011, 01:00 | 2 |
А понять по описании ошибки не пробовали? Не обработанное исключение - это значит, что исключение не обработали(Ваш КО).
В блок try может входить все что угодно. Добавлено через 2 минуты Читай как работают исключения и все ваши вопросы отпадут.
1
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
30.12.2011, 01:06 | 3 |
0
|
32 / 15 / 1
Регистрация: 06.05.2011
Сообщений: 56
|
|
30.12.2011, 01:11 | 4 |
Блок кода, который требуется контролировать на проявление исключений, заключается в блок try. Если внутри этого блока возникает исключительная ситуация, то генерируется исключение. Это исключение может быть перехвачено и обработано кодом программы в блоке catch. Исключения, возникающие на уровне системы, генерируются исполняющей системой автоматически. Для генерирования исключений вручную используется слово throw.
Если отсутствует catch с типом исключения, которое возникло, то также вы не словите это исключение. Однако если у вас есть catch с типом, который является базовым типом для возникшего исключения, то этот блок catch поймает и его. То есть, у нас вызвано исключение типа MyException, который является производным от Exception. То исключение типа MyException будет перехвачено в блоке catch(Exception). Чтобы поймать исключения всех типов - catch(...){};
1
|
30.12.2011, 11:31 | 6 | ||||||||||||||||||||||||||||||||||||||||||||||||||
Язык С представляет программисту очень ограниченные возможности обработки исключений, возникших при работе программы. В этом отношении С++ намного развитее С. Здесь у программиста существенно большие возможности по непосредственной обработке исключений. Комитет по разработке стандартов С++ предоставил очень простую, но мощную форму обработки исключений.
Темные дни С Типичная функция, написанная на С, выглядит примерно так:
Try-catch-throw Давайте же разберем основы обработки исключений в С++. Чтобы комфортно работать с исключениями в С++ вам нужно знать лишь три ключевых слова:
А теперь пример, демонстрирующий, как применить то, что вы узнали:
Код
Caught exception number: 1 Код
No exception detected! Как уже было сказано, catch может "ловить" данные любого типа, но вовсе не обязательно при это указывать переменную. Т.е. прекрасно будет работать что-нибудь типа этого:
Когда возбуждается исключительная ситуация, программа просматривает стек функций до тех пор, пока не находит соответствующий catch. Если оператор catch не найден, STL будет обрабатывать исключение в стандартном обработчике, который делает все менее изящно, чем могли бы сделать вы, показывая какие-то непонятные (для конечного пользователя) сообщения и обычно аварийно завершая программу. Однако более важным моментом является то, что пока просматривается стек функций, вызываются деструкторы всех локальных классов, так что вам не нужно забодиться об освобождении памяти и т.п. Перегрузка глобальных операторов new/delete А сейчас хотелось бы отправить вас к статье "Как обнаружить утечку памяти". В ней рассказывается, как обнаружить неправильное управление распределением памяти в вашей программе. Вы можете спросить, при чем тут перегрузка операторов? Если перегрузить стандартные new и delete, то открываются широкие возможности по отслеживанию ошибок (причем ошибок часто критических) с помощью исключений. Например:
Операторы throw без параметров Итак, мы увидели, как новый метод обработки ошибок удобен и прост. Блок try-catch может содержать вложенные блоки try-catch и если не будет определено соответствующего оператора catch на текущем уровен вложения, исключение будет поймано на более высоком уровне. Единственная вещь, о которой вы должны помнить, - это то, что операторы, следующие за throw, никогда не выполнятся.
Приложение Приведем пример, как все вышеизложенное может быть использовано в конкретном приложении. Преположим, у вас в программе есть класс cMain и экземпляр этого класса Main:
Метод обработки исключений, приведенный в статье, является удобным и мощным средством, однако только вам решать, использовать его или нет. Одно можно сказать точно - приведенный метод облегчит вам жизнь.
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
30.12.2011, 11:54 | 7 |
А ты понимаешь разницу между C++-исключениями и SEH-исключениями? Если нет, я рекомендовал бы к прочтению Джеффри Рихтера, "Windows для профессионалов" - там обработка исключений хорошо описана.
Книга есть в электронном виде в Сети, гугл в помощь.
0
|
38 / 38 / 4
Регистрация: 03.09.2011
Сообщений: 279
|
|
30.12.2011, 15:15 [ТС] | 8 |
Спасибо конечно что ответили, но здесь половина ответов это мануал который мне не нужен вообще, а некоторые как последний вообще ни к чему прилепили. Какая разница между такими то исключениями? Книгу читали по С++? Там обучают разнице между разными исключениями? Ну что за бред
1
|
Заблокирован
|
|
30.12.2011, 15:25 | 9 |
Vidok, выложи свой код!Я к чему веду - ты делаешь исключение к примеру для bad_alloc а у тебя деление ноль ещё в том блоке или что то в этом роде вот и получаешь
Не по теме: Ну понятно что ты кодишь и в чём то разбираешся и т.д., но неужели код сложно поцепить???:(
0
|
38 / 38 / 4
Регистрация: 03.09.2011
Сообщений: 279
|
|
30.12.2011, 15:32 [ТС] | 10 |
Так с кодом я уже разобрался) насколько я понял, в блок try должно входить то, где генерируется исключение, у меня это было отдельно, я поместил в блок поток ввода, а функции сказал, если ввод меньше нужного то кинуть в catch, но саму функцию в блок не поместил, по этому была ошибка.
Добавлено через 1 минуту А то что вводил, передавалось в функцию как параметр
0
|
38 / 38 / 4
Регистрация: 03.09.2011
Сообщений: 279
|
|
30.12.2011, 15:51 [ТС] | 12 |
Читал, но автор дает код примера до того как будет говорить о исключениях и обработке ошибок. По этому и пишу сюда. Но сам понял больше, чем мне ответили в итоге
0
|
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 11
|
||||||
05.06.2012, 15:41 | 13 | |||||
Привет!
Выдает системную ошибку и все тут Как поймать подскажите, пожалуйста!
0
|
05.06.2012, 15:41 | |
05.06.2012, 15:41 | |
Помогаю со студенческими работами здесь
13
Как передать управление в блок catch после системного исключения (компилятор g++)? Один блок catch для двух типов исключений порожденных от одного класса Блок try и catch Блок try.catch Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |