Нетипизированные указатели

Процедура GetMem(p,size);

P – var типа указатель,

Size – размер запрашиваемой памяти в байтах.

Используется для нетипизированных указателей. Создает новую динамическую переменную требуемого размера и помещает адрес блока в переменную типа указатель р.

Type

Rec=record

Fam:string[20];

Rost:byte

End;

Var

P1:pointer;

---------------------------------------------

GetMem(p1,SizeOf(Rec)); {размещение памяти}

SizeOf - стандартная функция, возвращает размер аргумента в байтах.

Выделится SizeOf(Rec) байтов в куче и адрес начала этих байтов поместится в адрес р1.

GetMem(p,200); {размещение памяти}

Выделится 200 байтов в куче и адрес начала этих байтов поместится в адрес Р.

Динамическая память может быть освобождена 3-мя способами:

1. по завершению всей программы.

2. С помощью процедуры Dispose (для типизированных указателей)

New(p1);

----------------

Dispose(p1);

Освобождает n байтов в куче (n зависит от типа), начиная с адреса, записанного в указателе Р.

3. С помощью процедуры FreeMem (для нетипизированных указателей)

GetMem(p,200);

---------------------------

FreeMem(p,200);

Освобождает 200 байтов в куче, начиная с адреса, записанного в указателе Р.

После освобождения памяти указатели автоматически не обнуляются и фактически указывают на несуществующую переменную. Поэтому рекомендуется всем высвободившимся указателям присвоить значение nil.

При выделении динамической памяти полезной является функция MaxAvail – возвращает размер наибольшего непрерывного участка свободной памяти.

Var

P2:^real;

If MaxAvail>sizeof(real) then new(p2);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: