Составители:
Рубрика:
значение 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
Страницы
- « первая
- ‹ предыдущая
- …
- 108
- 109
- 110
- 111
- 112
- …
- следующая ›
- последняя »
