Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Переменная HeapError

Переменная HeapError позволяет вам реализовать функцию обра-

ботки ошибки динамически распределяемой области памяти. Эта функ-

ция вызывается каждый раз, когда программа динамического распре-

деления памяти не может выполнить запрос на выделение памяти.

НеаpError является указателем, который ссылается на функцию со

следующим заголовком:

function HeapFunc(Size: word): integer; far;

Заметим, что директива far указывает функции обработки ошиб-

ки динамически распределяемой области не необходимость использо-

вать дальнюю модель вызова.

Функция обработки ошибки динамически распределяемой области

реализуется путем присваивания ее адреса переменной НеаpEror:

HeapError := @HeapFunc;

Функция обработки ошибки динамически распределяемой области

памяти получает управление, когда при обращении к процедурам New

или GetМем запрос не может быть выполнен. Параметр Size содержит

размер блока, для которого не оказалось области памяти соответс-

твующего размера, и функция обработки ошибки динамически распре-

деляемой области произведет попытку освобождения блока, размер

которого не меньше данного размера.

Перед вызовом функции обработки ошибки динамически распреде-

ляемой области памяти администратор динамически распределяемой

памяти пытается выделить свободный блок из блоков вторичного раз-

биения, а также использовать непосредственный вызов функции

GlobalAlloc.

В зависимости от успеха выполнения этой попытки функция об-

работки ошибки динамически распределяемой области возвращает зна-

чения 0, 1 или 2. Возвращаемое значение 0 свидетельствует о неу-

дачной попытке, что немедленно приводит к возникновению ошибки во

время выполнения программы. Возвращаемое значение 1 также свиде-

тельствует о неудачной попытке, но вместо ошибки этапа выполнения

оно приводит к тому, что процедуры New или GetМем возвращают ука-

затель nil. Наконец, возвращаемое значение 2 свидетельствует об

удачной попытке и вызывает повторную попытку выделить память (ко-

торая также может привести к вызову функции обработки ошибки ди-

намически распределяемой области).

Стандартная обработки функция ошибки динамически распределя-

емой области всегда возвращает значение 0, приводя, таким обра-

зом, к ошибке всякий раз, когда не могут быть выполнены процедуры

New или GetМем. Однако для многих прикладных задач более подходя-

щей является простая функция обработки ошибки динамически распре-

деляемой области, пример которой приведен ниже:

function HeapFunc(Size: Word): Integer; far;

begin

HeapFunc := 1;

end;

Если такая функция реализована, то вместо принудительного

завершения работы программы в ситуации, когда процедуры New или

GetМем не могут выполнить запрос, она будет возвращать пустой

указатель (указатель nil).

Соседние файлы в предмете Программирование на Pascal