
Рассмотрим не большой пример по работе с динамической памятью.
var
p_int1, p_int2 : ^integer;
p_real : ^real;
i : integer;
BEGIN
i:=7;
New(p_int1); {выделение памяти под переменные}
New(p_int2);
New(p_real);
p_int1^:=48; {переменным типа integer присвоить значение}
p_int2^:=3;
p_real^:=2.732; {переменной типа real присвоить значение}
p_int2^:=i;
i:=p_int1^; {i=48}
Dispose(p_int1); {освобождение памяти, занимаемой}
Dispose(p_int2); {переменными}
Dispose(p_real);
END.
В разделе описаний этой программы объявляются три указателя: p_int1 и p_int2, которые будут указывать на ячейки памяти, содержащие значения типа integer, и p_real, указывающий на значение типа real.
Прежде всего, нужно выделить в динамической памяти место под переменные, на которые ссылаются указатели. Поэтому сначала для каждого из указателей вызывается процедура New.
Теперь с выделенными участками памяти можно работать как с обычными переменными, имена которых состоят из имени соответствующего указателя и знака ^.
После выполнения всех необходимых действий с динамическими переменными, нужно освободить выделенные участки памяти: в конце программы для каждого указателя вызывается процедура Dispose.
Для выделения и освобождения динамической памяти используются также процедуры:
GetMem(P,Size) – выделяет память размером Size под переменную P;
FreeMem(P,Size) – освобождает память размером Size, занятую переменной P.
Эти процедуры используются аналогично процедурам New и Dispose. Но запомните, что освобождать нужно ровно столько памяти, сколько ранее было выделено.

Комментарии
Комментариев пока нет - будьте первым.