Динамическая память: Пример №22

Рассмотрим не большой пример по работе с динамической памятью.

pascal
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. Но запомните, что освобождать нужно ровно столько памяти, сколько ранее было выделено.