Справочные данные по языку C++_____________________________665

Операция delete освобождает память, но сама не задает указателю на эту па-
мять значения NULL. Поэтому желательно это делать программно, чтобы случай-
но в дальнейшем не воспользоваться указателем, который уже ни на что не указы-
вает:

delete А;

А = NULL;

11.10 Исключения и сигналы

Исключения и сигналы генерируются при прерывании нормального выполне-
ния программы вследствие каких-то ошибок или событий.

Исключение — это специфический объект, генерируемый в исключительных
ситуациях (при недопустимых операциях, ошибках). Исключения подробно рас-
смотрены в главе 4 в разделе 4.9 и в данном разделе рассматриваться не будут.

Сигнал — это некоторое непредвиденное событие (прерывание), которое может
вызвать преждевременное завершение программы. Перечислим некоторые из та-
ких непредвиденных событий: прерывание программы, вызванное нажатием поль-
зователем клавиш Ctrl+C, появление недопустимой команды, ошибочный доступ к
памяти (нарушение сегментации), запрос от операционной системы о завершении
работы, ошибка операций с вещественными числами (деление на нуль или пере-
множение слишком больших действительных чисел).

Ниже перечислены некоторые стандартные сигналы, определенные в заголо-
вочном файле signal.h (полный список приведен в главе 14 в разделе 14.14.1).

SIGABRT            Аварийное завершение программы (например, в резуль-
тате вызова функции abort). Действие по умолчанию —
вызов _exit(3)

SIGFPE             Ошибка арифметической операции, например, деление
на нуль или операция, вызвавшая переполнение. Дейст-
вие по умолчанию — вызов _exit(l)

SIGINT             Получение интерактивного сигнала (например, преры-
вание Ctrl+C). Действие по умолчанию — прерывание
INT 23h

SIGUSR1, SIGUSR2, Определенные пользователем (только в Win32) сигналы
SIGUSR3            пользователя, генерируемые функцией raise. Действие
по умолчанию — игнорирование сигнала

Библиотека обработки сигналов содержит функцию signal, перехватывающую
сигналы. В функцию signal передаются два параметра: целочисленный номер сиг-
нала и указатель на функцию обработки сигнала.

Обычно сигналы автоматически генерируются при возникновении соответст-
вующих событий. Но программа может целенаправленно генерировать сигналы
функцией raise, в которую передаются целочисленное значение номера сигнала.

Например, вы можете предусмотреть в своей программе обработчик некоторо-
го вводимого вами сигнала SIGUSR1. Пусть вы дали ему имя Handl_SIGUSRl.
Тогда где-то в программе (например, при обработке события OnCreate формы) вам
надо установить в системе этот обработчик с помощью оператора

signal(SIGUSR1, Handl_SIGUSRl);

При этом не забудьте вставить в файл директиву

ftinclude <signal.h>