Основы программирования в Win32API. Марапулец Ю.В. - 110 стр.

UptoLike

Составители: 

значение NULL.
Но если оператору присваивания некуда передавать значение,
он не выполняет никаких действий и даже не возвращает код ошибки. При
этом порождается исключение, и если процесс не может его обработать, опе-
рационная система должна закрыть данный процесс.
Часто бывает трудно провести черту между ошибками и исключениями.
Различие между ними порой зависит от конкретной реализации. Для того что-
бы распознавать команды, которые могут порождать исключения, необходимо
иметь некоторый опыт. Вы должны знать всевозможные типы исключений и
определить, какие операции могут их породить. Например, ошибка в операто-
ре присваивания приводит к исключению типа нарушение прав доступа. Спи-
сок возможных исключений обычно изменяется
в зависимости от конкретного компьютера, однако имеется ряд исключений,
которые определяются на уровне ядра Windows [2]:
несоответствие типов данных (data-type misalignment);
прерывание отладчика (debugger breakpoint);
пошаговая отладка (debugger single-step);
деление на ноль в операции с плавающей запятой (floating-point divide
by zero);
переполнение и потеря разрядов в операции с плавающей запятой
(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 GetExceptionCode(void). Функция возвращает код исключения.
В табл. 8.1 приведены наименования основных кодов.
Таблица 8.1.
Код исключения Описание
EXCEPTION_ACCESS_VIOLATION
Попытка обращения к ячейке памяти,
доступ к которой запрещен (например, па-
мять не выделена)
EXCEPTION_FLT_DIVIDE_BY_ZERO Деление на ноль с плавающей точкой
EXCEPTION_INT_DIVIDE_BY_ZERO Деление на ноль с фиксированной точкой
EXCEPTION_INT_OVERFLOW Целочисленное переполнение
EXCEPTION_PRIV_INSTRUCTION
Попытка исполнения привилегированной
команды
110
значение NULL. Но если оператору присваивания некуда передавать значение,
он не выполняет никаких действий и даже не возвращает код ошибки. При
этом порождается исключение, и если процесс не может его обработать, опе-
рационная система должна закрыть данный процесс.
     Часто бывает трудно провести черту между ошибками и исключениями.
Различие между ними порой зависит от конкретной реализации. Для того что-
бы распознавать команды, которые могут порождать исключения, необходимо
иметь некоторый опыт. Вы должны знать всевозможные типы исключений и
определить, какие операции могут их породить. Например, ошибка в операто-
ре присваивания приводит к исключению типа нарушение прав доступа. Спи-
сок          возможных           исключений         обычно          изменяется
в зависимости от конкретного компьютера, однако имеется ряд исключений,
которые определяются на уровне ядра Windows [2]:
     – несоответствие типов данных (data-type misalignment);
     – прерывание отладчика (debugger breakpoint);
     – пошаговая отладка (debugger single-step);
     – деление на ноль в операции с плавающей запятой (floating-point divide
 by zero);
     – переполнение и потеря разрядов в операции с плавающей запятой
 (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 GetExceptionCode(void). Функция возвращает код исключения.
В табл. 8.1 приведены наименования основных кодов.
                                                                      Таблица 8.1.
            Код исключения                             Описание
                                          Попытка обращения к ячейке памяти,
   EXCEPTION_ACCESS_VIOLATION         доступ к которой запрещен (например, па-
                                      мять не выделена)
  EXCEPTION_FLT_DIVIDE_BY_ZERO            Деление на ноль с плавающей точкой
  EXCEPTION_INT_DIVIDE_BY_ZERO            Деление на ноль с фиксированной точкой
    EXCEPTION_INT_OVERFLOW                Целочисленное переполнение
                                          Попытка исполнения привилегированной
    EXCEPTION_PRIV_INSTRUCTION
                                      команды



                                     110