Подпрограммы динамического распределения памяти
Создать динамическую переменную можно с помощью одной из следующих подпрограмм.
1. Процедура New(var p: <указатель>) выделяет место в динамически распределяемой области памяти, называемой «кучей», для размещения переменной базового типа указателя p и начальный адрес присваивает переменной p.
2. Функция New(<имя ссылочного типа>):pointer выделяет место в динамически распределяемой области памяти для размещения переменной указанного в качестве параметра типа и возвращает адрес выделенной области.
3. Процедура GetMem (var p:pointer; n:word) выделяет в «куче» блок памяти размером n, начальный адрес блока помещает в p. Если ртипизованный указатель, то значением второго параметра должен быть размер базового типа указателя. Для его определения удобно использовать функцию SizeOf(<имя типа>|<выражение>):word, которая возвращает размер своего параметра в байтах.
Если по какой-либо причине место для размещения переменной не может быть выделено, то происходит аварийный останов.
Функция MaxAvail:LongInt возвращает размер максимального свободного блока в «куче». С ее помощью можно проверить, достаточно ли места для размещения динамической переменной. Функция MемAvail:LongInt возвращает суммарный размер всех свободных блоков.
После окончания работы с динамической переменной память, занимаемая этой переменной, должна быть освобождена одной из процедур:
Dispose(var p: <типизованный указатель>)
или
FreeMem(var p: pointer; size:word).
Dispose освобождает память, занимаемую переменной базового типа указателя р. FreeMem освобождает блок памяти размером size байтов с начальным адресом р. В качестве параметра size должен быть указан размер динамической переменной. Каждому обращению к подпрограмме выделения памяти должна соответствовать процедура освобождения памяти.