TURBO PASCAL |
Новости
|
Переменная 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). |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |