Есть следующий код:
#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
using std::cin; using std::cout; using std::endl; using std::vector;
int main()
{
vector<int> input;
try
{
int i;
while (cin >> i) input.push_back(i);
for (int i = 0; i <= input.size(); ++i)
{
cout << "v [" << i << "] - " << input[i] << "\n";
}
cout << endl;
}
catch (std::out_of_range) {
cout << "Index out of range!\n";
return 1;
}
return 0;
}
В цикле for() нарочно допущена ошибка в диапазоне вывода элементов массива.
Вот только проблема в том, что она не перехватывается catch'ем.
Её "ловит" компиллятор Visual Studio, но при его отключении сама функция catch() не подаёт признаков жизни.
ШТО ДЕЛОТЬ????
Заранее спасибо!
C/C++
Не работает функция catch() | C++
попробуйте использовать at(i) вместо [i] чтобы вектор мог генерировать исключения
operator[] не должен проверять выход за границы
operator[] не должен проверять выход за границы
Попробуйте так:
catch (std::out_of_range e)
catch (std::out_of_range e)
Олег Шаймиев
Попробовал. Результат тот же.
Равно как и с catch (std::out_of_range& e)
Равно как и с catch (std::out_of_range& e)
оператор [] осуществляет доступ без проверки на диапазон, поэтому не выбрасывает исключений.
UPD:: а правильный ответ от Айрана не заметил)
UPD:: а правильный ответ от Айрана не заметил)
Проблема заключается в том, что выход за границы вектора не является исключением типа std::out_of_range. Вместо этого, это приводит к неопределенному поведению программы.
Чтобы перехватить эту ошибку, вы можете использовать стандартное исключение std::exception. Вот как это можно сделать:
#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
using std::cin; using std::cout; using std::endl; using std::vector;
int main()
{
vector<int> input;
try
{
int i;
while (cin >> i) input.push_back(i);
for (int i = 0; i <= input.size(); ++i)
{
cout << "v [" << i << "] - " << input.at(i) << "n"; // используем метод at() для доступа к элементам вектора
}
cout << endl;
}
catch (const std::exception& e) { // перехватываем исключение типа std::exception
cout << "Error: " << e.what() << endl; // выводим сообщение об ошибке
return 1;
}
return 0;
}
В этом коде мы используем метод at() для доступа к элементам вектора, который генерирует исключение типа std::out_of_range, если индекс находится за пределами диапазона вектора. Мы также перехватываем исключение типа std::exception, чтобы обработать любые другие исключения, которые могут возникнуть в программе.
Чтобы перехватить эту ошибку, вы можете использовать стандартное исключение std::exception. Вот как это можно сделать:
#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
using std::cin; using std::cout; using std::endl; using std::vector;
int main()
{
vector<int> input;
try
{
int i;
while (cin >> i) input.push_back(i);
for (int i = 0; i <= input.size(); ++i)
{
cout << "v [" << i << "] - " << input.at(i) << "n"; // используем метод at() для доступа к элементам вектора
}
cout << endl;
}
catch (const std::exception& e) { // перехватываем исключение типа std::exception
cout << "Error: " << e.what() << endl; // выводим сообщение об ошибке
return 1;
}
return 0;
}
В этом коде мы используем метод at() для доступа к элементам вектора, который генерирует исключение типа std::out_of_range, если индекс находится за пределами диапазона вектора. Мы также перехватываем исключение типа std::exception, чтобы обработать любые другие исключения, которые могут возникнуть в программе.
Олег Шаймиев
Я уже пробовал обращаться к chatgpt, не помогает
Похожие вопросы
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- СОЗДАНИЕ ФУНКЦИЙ В C++
- Размер динамического массива, передаваемого в функцию в C++.
- Помогите написать функцию на C++
- Как написать функцию в c++ которая складывает все положительные числа
- Сделать через функцию strcat c++
- Как работает математика в C++ Почему (32-6)/100*20 = 0
- Объясните максимально простым языком, как работает данный код C++
- Не работает код на c++
- Не работает код на c++
Завтра поставлю за Ваше имя десять свечек в церкви.
Семнадцать часов жизни заняла простейшая прога... боже ты мой...
Без шуток - ОГРОМНОЕ спасибо!