Мне нужно изучить основы C++ для исследовательского проекта, и я экспериментирую с обработкой ошибок/исключений. Я успешно использовал команду throw
, чтобы предвидеть события, которые могут произойти (например, деление на ноль), но я не могу понять, как поймать непредвиденные исключения. Возьмите этот пример кода:C++ обработка непредвиденных ошибок
#include <iostream>
#include <exception>
#include <stdexcept>
using namespace std;
void arrayOutOfBound()
{
int a[3] = {1, 2, 3};
try
{
cout << "This should not display: " << a[5] << endl;
}
catch(runtime_error &e)
/* catch(exception &e) // also does not work */
{
cout << "Error: " << e.what() << endl;
}
}
int main()
{
arrayOutOfBound();
}
Я предполагаю, что я должен использовать throw
заявления где-то, но предположим, что я действительно не знал, что a[5]
не будет работать (или пользователь вошел в этот индекс, и я не проверял для массива размер), то как я могу предотвратить сбой программы? (как это происходит в отладчике Visual C++ Express 2010)
Примечание: если бы я сделал try { int result = a[5]; }
сначала, вне блока и попытался использовать cout << result
в конце, программа не компилируется. Компилятор пытается мне помочь, но поэтому я не могу попробовать обработку исключений.
Дело не зная того или нет 'а [5]' будет успешным, но (таким же образом) для 'a [x]' для отказа. Если вы не готовы, ваша программа заканчивается, потому что она не обрабатывает ее для вас. Это, конечно, предполагает, что у вас есть класс массива, способный проверять. – chris