Для того чтобы в программе вместо стандартной функции монитора кучи работала пользовательская необходимо адрес пользовательской функции записать в системную переменную HEAPerror.
Begin
HEAPerror:=@user_func;
Пример: требуется выделить два блока памяти для хранения информации размеров в 1 байт и поместить в их некоторые значения. Если под какой либо один или оба блока не хватает памяти то очистить память и завершить выполнение программы.
Программа:
Var
X,y:^byte;
P:pointer;
{$f+}
Function User_f(size:word):integer;
Begin
User_func:=1;
End;
{$f-}
Begin
Mark(p);
Heaperror:=@user_f;
.
.
New(x); new(y);
If y=nil then
Begin
Write(‘’);
Readkey;
Release(p);
Exit;
End;
X^:=3;
Y^:=1;
Release(p);
End.
Лекция № 10
Ссылочный и указательный типы данных. Линейные динамические списки. Определение узла списка. Организация динамических списков типа FIFO, LIFO. Основные операции над списками: добавление узла, вставка узла, удаление узла, просмотр узлов списка. Удаление списка.