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