Составители:
• переполнение и потеря разрядов в операции с плавающей запятой (floating-point
overflow and underflow);
• зарезервированный операнд в операции с плавающей запятой (floating-point reserved
operand);
• нарушение защиты страницы (guard-page violation);
• недопустимый оператор (illegal instruction);
• деление на ноль в операции с целыми числами (integer divide by zero);
• переполнение в операции с целыми числами (integer overflow);
• нарушение прав доступа к памяти (memory-access violation);
• ошибка чтения страницы (page-read error);
• превышение квоты страничного файла (paging file quota exceeded);
• привилегированный оператор (privileged instruction).
Тип возникшего исключения можно определить, используя функцию DWORD Ge-
tExceptionCode(void). Функция возвращает код исключения. В таблице 3.1 приведены
наименования основных кодов.
Таблица 3.1
EXCEPTION_ACCESS_VIOLATION Попытка обращения к ячейке памяти,
доступ к которой запрещен (например,
память не выделена)
EXCEPTION_FLT_DIVIDE_BY_ZERO Деление на ноль с плавающей точкой
EXCEPTION_INT_DIVIDE_BY_ZERO Деление на ноль с фиксированной точкой
EXCEPTION_INT_OVERFLOW Целочисленное переполнение
EXCEPTION_PRIV_INSTRUCTION Попытка исполнения привилегированной
команды
§ 3.3. Средства обработки исключений в Visual C++
Блок программного кода на языке С++ всегда должен начинаться ключевыми сло-
вами try и catch. Блок try помечает фрагмент программы, который может породить ис-
ключение, а блок catch содержит программу, запускающуюся при наличии исключения.
С точки зрения программиста, подобные синтаксические структуры удобны для отделе-
ния программного кода, предназначенного для обработки исключительных ситуаций, от
кода, выполняющего обычные задачи. В Visual C++ реализован механизм обработки
исключений, который основан на схеме, предложенной ANSI-комитетом по стандарти-
зации языка C++. В соответствии с этой схемой, перед вызовом функции, которая может
стать причиной возникновения исключительной ситуации, должен быть инициирован
обработчик исключений. Если функция приводит к возникновению ненормальной си-
туации, генерируется исключение и управление передается обработчику.
В среде Visual C++ обработка исключений поддерживается с помощью нескольких
механизмов:
• функций, обеспечивающих структурированную обработку исключений;
• классов, отвечающих за обработку определенных типов исключений;
• макрокоманд, позволяющих осуществить структуризацию обработчиков исключений
приложения;
• функций, предназначенных для генерации исключений различных типов.
Все эти механизмы позволяют генерировать исключения нужных типов и при не-
обходимости прекращать выполнение программы.
Как уже было сказано выше, основу любого механизма обработки исключений в
среде Visual C++ составляют операторы try и catch. Структура try/catch отделяет подпро-
87
• переполнение и потеря разрядов в операции с плавающей запятой (floating-point
overflow and underflow);
• зарезервированный операнд в операции с плавающей запятой (floating-point reserved
operand);
• нарушение защиты страницы (guard-page violation);
• недопустимый оператор (illegal instruction);
• деление на ноль в операции с целыми числами (integer divide by zero);
• переполнение в операции с целыми числами (integer overflow);
• нарушение прав доступа к памяти (memory-access violation);
• ошибка чтения страницы (page-read error);
• превышение квоты страничного файла (paging file quota exceeded);
• привилегированный оператор (privileged instruction).
Тип возникшего исключения можно определить, используя функцию DWORD Ge-
tExceptionCode(void). Функция возвращает код исключения. В таблице 3.1 приведены
наименования основных кодов.
Таблица 3.1
EXCEPTION_ACCESS_VIOLATION Попытка обращения к ячейке памяти,
доступ к которой запрещен (например,
память не выделена)
EXCEPTION_FLT_DIVIDE_BY_ZERO Деление на ноль с плавающей точкой
EXCEPTION_INT_DIVIDE_BY_ZERO Деление на ноль с фиксированной точкой
EXCEPTION_INT_OVERFLOW Целочисленное переполнение
EXCEPTION_PRIV_INSTRUCTION Попытка исполнения привилегированной
команды
§ 3.3. Средства обработки исключений в Visual C++
Блок программного кода на языке С++ всегда должен начинаться ключевыми сло-
вами try и catch. Блок try помечает фрагмент программы, который может породить ис-
ключение, а блок catch содержит программу, запускающуюся при наличии исключения.
С точки зрения программиста, подобные синтаксические структуры удобны для отделе-
ния программного кода, предназначенного для обработки исключительных ситуаций, от
кода, выполняющего обычные задачи. В Visual C++ реализован механизм обработки
исключений, который основан на схеме, предложенной ANSI-комитетом по стандарти-
зации языка C++. В соответствии с этой схемой, перед вызовом функции, которая может
стать причиной возникновения исключительной ситуации, должен быть инициирован
обработчик исключений. Если функция приводит к возникновению ненормальной си-
туации, генерируется исключение и управление передается обработчику.
В среде Visual C++ обработка исключений поддерживается с помощью нескольких
механизмов:
• функций, обеспечивающих структурированную обработку исключений;
• классов, отвечающих за обработку определенных типов исключений;
• макрокоманд, позволяющих осуществить структуризацию обработчиков исключений
приложения;
• функций, предназначенных для генерации исключений различных типов.
Все эти механизмы позволяют генерировать исключения нужных типов и при не-
обходимости прекращать выполнение программы.
Как уже было сказано выше, основу любого механизма обработки исключений в
среде Visual C++ составляют операторы try и catch. Структура try/catch отделяет подпро-
87
Страницы
- « первая
- ‹ предыдущая
- …
- 83
- 84
- 85
- 86
- 87
- …
- следующая ›
- последняя »
