TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Переменная 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).

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz