Рассмотрим следующий код:
try {
int *i = NULL;
i[100] = 20;
catch (...) {
std::cout << "Exception Caught";
}
При запуске этого кода происходит сбой (очевидно, при обращении к нулевому указателю).
Хотя в режиме отладки Visual Studio заявляет об исключении Uncaught, касающемся нарушения прав записи ... также понятно.
Я ожидал, что здесь будет поймано исключение, но нет.
Я пришел к выводу, что не исключение не выбрасывается.
Так почему же VS предупреждает о неисследованном исключении?
Этот вопрос начался, когда я хотел защитить себя от кода другого программиста и хотел обернуть вызовы его функций try-catch, предполагая, что он может совершать некоторые нарушения доступа. Но если я могу ловить только те исключения, которые выкинуты точно, я просто облажался.
Единственное другое объяснение, которое я могу иметь, это то, что это из-за какой-то конфигурации проекта или компилятора.
Я запустил это в новом консольном приложении C ++ VS2005.
Спасибо