Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2

Не ловит exception

17.06.2013, 21:07. Показов 3026. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему не ловится range error?
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 <iostream>
#include <stdexcept>
#include <string>
 
using namespace std;
 
int main()
try
{
    string s = "Success!\n"; for (int i=0; i<=10; ++i) cout << s[i];
    return 0;
}
 
catch (exception& e)
{
    cerr << "error: " << e.what() << '\n';
    return 1;
}
 
catch (...)
{
    cerr << "Unknown exception!\n";
    return 2;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.06.2013, 21:07
Ответы с готовыми решениями:

Не ловит Exception а NumberFormatException ловит
Добрый день. Метод проверяющий строку на только цифры(работает): public boolean isNumber(String s) throws NumberFormatException { ...

First chance exception at $646E6970. Exception class $C0000005 with message access violation at 0x646e6970
Перешёл с XE6 на Delphi 10.3 после чего проект перестал запускаться, выдавая ошибку - First chance exception at $646E6970. Exception...

First chance exception at $77ADB09E. Exception class EAccessViolation with message 'Access Violation'. Process
Объясните в каких случаях возникает эта ошибка, из-за чего? Как справиться с этой ошибкой? Только плиз на примере и доступными словами, т....

11
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
17.06.2013, 21:23
Оператор [] не бросает исключений. Если нужна проверка выхода за границы используй at.
1
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
20.06.2013, 00:12  [ТС]
а что здесь может генерировать неизвестное исключение? (ветка Unknown exception)

Добавлено через 26 минут
или что вообще может генерировать неизвестное исключение?
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
20.06.2013, 02:50
Цитата Сообщение от Dani Посмотреть сообщение
а что здесь может генерировать неизвестное исключение? (ветка Unknown exception)
В данном случае ничего. Все стандартные типы исключений являются наследниками std::exception, следовательно любое из этих исключений будет перехвачено в первом же блоке.
Цитата Сообщение от Dani Посмотреть сообщение
или что вообще может генерировать неизвестное исключение?
Если, например, обработчик std::exception заменить на обработчик std::bad_alloc(ошибка выделения памяти), то исключение std::out_of_range, генерируемое методом at попадёт как раз в последний блок, т.к. его обработчик не был предусмотрен
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try
{
    string s = "Success!\n"; for (int i=0; i<=10; ++i) cout << s.at(i);
    return 0;
}
 
catch (bad_alloc& e)
{
    cerr << "error: " << e.what() << '\n';
    return 1;
}
 
catch (...)
{
    cerr << "Unknown exception!\n";
    return 2;
}
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.06.2013, 02:54
Dani, кидают range_error лишь контейнеры STL, да и то при методе at (некоторые реализации кидают и при обычном [], но гарантии в этом нет).

Цитата Сообщение от Dani Посмотреть сообщение
а что здесь может генерировать неизвестное исключение? (ветка Unknown exception)
а туда просто сыплется все, что ни попадя. Т.к. фактически стандартного исключения для вашего случая нет, то приходит как раз в это (последнее) ветвление, минуя все стандартные.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2013, 11:43
Цитата Сообщение от MrGluck Посмотреть сообщение
некоторые реализации кидают и при обычном []
Кстати, недавно почитывал у Страуструпа про std::bitset что, цитирую:
Операция индексирования генерирует исключение out_of_range, когда индекс выходит за границы набора битов. Индексации без проверки индекса нет.
Правда по факту получить исключение удалось только на bitset<0>. https://ideone.com/kgfex2
В других случаях выход за диапазон не отлавливается.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.06.2013, 11:51
Tulosba,
C++
1
constexpr bool operator[](size_t pos);
49 Requires: pos shall be valid.
50 Returns: true if the bit at position pos in *this has the value one, otherwise false.
51 Throws: Nothing.
C++
1
bitset<N>::reference operator[](size_t pos);
52 Requires: pos shall be valid.
53 Returns: An object of type bitset<N>::reference such that (*this)[pos] == this->test(pos),
and such that (*this)[pos] = val is equivalent to this->set(pos, val).
54 Throws: Nothing.
55 Remark: For the purpose of determining the presence of a data race (1.10), any access or update
through the resulting reference potentially accesses or modifies, respectively, the entire underlying
bitset.
В С++03 тоже самое, только возвращающий bool - не constexpr. А в С++98 не написано про этот оператор вообще ничего.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2013, 12:00
ForEveR, за что купил, за то и продаю На bitset<0> ловим исключение (см. предыдущий пост).
А вот интересно, почему бы не объявить оператор как noexcept, если он по стандарту Throws: Nothing. ?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.06.2013, 12:08
Tulosba, http://www.open-std.org/jtc1/s... /n3248.pdf

The other concern in this class is the operator[] overload, which now prohibits checked implementations. Unless the core language behavior can be weakened, this operator should not be declared noexcept.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2013, 12:23
ForEveR, честно говоря, не очень понял. Что значит:
Цитата Сообщение от ForEveR Посмотреть сообщение
Unless the core language behavior can be weakened
?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.06.2013, 12:28
Tulosba, Ну там, всю статью надо читать. В N3242 оба эти оператора были noexcept.
C++
1
constexpr bool operator[](size_t pos) noexcept;
49 Requires: pos shall be valid.
50 Returns: true if the bit at position pos in *this has the value one, otherwise false.
C++
1
bitset<N>::reference operator[](size_t pos) noexcept;
51 Requires: pos shall be valid.
52 Returns: An object of type bitset<N>::reference such that (*this)[pos] == this->test(pos),
and such that (*this)[pos] = val is equivalent to this->set(pos, val).
53 Remark: For the purpose of determining the presence of a data race (1.10), any access or update
through the resulting reference potentially accesses or modifies, respectively, the entire underlying
bitset.
В N3337 уже нет.

На тему данного дока, покидаю нужные цитатки
Wide Contracts
A wide contract for a function or operation does not specify any undefined behavior. Such a contract has no preconditions: A function with a wide contract places no additional constraints on its arguments, on any object state, nor on any external global state. Examples of functions having wide contracts would be vector<T>::begin() and vector<T>::at(size_type) . Examples of functions not having a wide contract would be vector<T>::front() and vector<T>::operator[](size_type).

Narrow Contracts
A narrow contract is a contract which is not wide. Narrow contracts for a functions or operations result in undefined behavior when called in a manner that violates the documented contract. Such a contract specifies at least one precondition involving its arguments, object state, or some external global state, such as the initialization of a static object. Good examples of standard functions with narrow contracts are vector<T>::front() and vector<T>::operator[](size_type)

Alternative additional recommendation
If the core language is not amended to support a testing mode, we recommend the following guideline:
• Remove noexcept specifications from each library function having a narrow contract, typically (but not always) indicated by the presence of a Requirements: clause
В частности bitset<N>::operator[] имеет narrow contract, т.к. проверки запрещены, данные передаются от пользователя, не соблюдение precondition есть UB.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2013, 12:49
Кажется стало проясняться. Если вызов функции может привести к UB (узкий контракт), то объявлять её noexcept не рекомендуется, ибо в тестовом (отладочном) режиме всё же имеет смысл (определяется реализацией) кинуть исключение вместо получения UB.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2013, 12:49
Помогаю со студенческими работами здесь

Unhandled exception at 0x7c812a5b : Microsoft C++ exception: std::bad_alloc at memory location 0x0012f350
что то я запутался совсем. подскажите где глюк? Считываю из XML данные: char* ValueVariable(длинная символьная строка) пытаюсь ее...

Unhandled exception at at 0x75E717D2 in ConsoleApplication24.exe: Microsoft C++ exception: std::out_of_range at memory l
Здравствуйте, помогите пожалуйста, при проходе через последний цикл выдаёт вот такую ошибку: Unhandled exception at at 0x75E717D2 in...

Ошибка: First chance exception at $FEEEFEEE. Exception class $C0000005 with message 'access violation at 0xfeeefeee:
Здравствуйте! Подскажите пожалуйста, из-за чего может возникнуть такая ошибка?: First chance exception at $FEEEFEEE. Exception class...

Ошибка First chance exception at $75A6D36F. Exception class EAccessViolation.
на что программа ругается не пойму((( подскажите вот такая ошибка First chance exception at $75A6D36F. Exception class EAccessViolation...

Database Exception – yii\db\Exception ↵ Caused by: PDOException
Database Exception – yii\db\Exception ↵ Caused by: PDOException Отчего это может быть? Добавлено через 49 минут Это на строчке...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru