ВУЗ:
Составители:
Рубрика:
15
1.6 Процедуры GetMem и FreeMem
Для выделения/освобождения динамической памяти, контролируемой бести-
повым указателем, используется другая пара процедур: GetMem и FreeMem. Если
p – указатель любого типа (в частности, типа pointer), то вызов
GetMem(p,nb) выделяет в динамической памяти участок размера nb байтов и
записывает адрес его начала в указатель p. Вызов FreeMem(p) освобождает ди-
намическую память, контролируемую
указателем p. Следует обратить внимание,
что при вызове FreeMem не указывается размер освобождаемой памяти, посколь-
ку в каждом выделенном блоке хранится его размер, и FreeMem пользуется этой
информацией.
В большинстве ситуаций использования типизированных указателей и про-
цедур New и Dispose оказывается достаточно. Процедуры GetMem и FreeMem
применяются там, где требуется
более гибкое управление памятью.
Пример. Динамический массив.
Динамическим будем называть массив, размер которого задается в процессе
работы программы. В Delphi (начиная с версии 4) динамические массивы реали-
зованы средствами языка:
var dyn: array of integer;
n: integer;
begin
read(n);
Assert(n>0);
SetLength(dyn,n);
dyn[0]:=5;
...
Однако, динамические массивы нетрудно создать и с помощью обычных масси-
вов с помощью процедур GetMem и
FreeMem:
const sz=MaxInt div sizeof(integer);
type Arr: array [0..sz-1] of integer;
var dyn: ^Arr;
n: integer;
begin
read(n);
Assert(n>0);
GetMem(dyn,n*sizeof(integer));
dyn^[0]:=5; // можно dyn[0]:=5
...
Идея подобной реализации динамического массива состоит в следующем.
Описывается тип массива с большим количеством элементов и переменная dyn,
Страницы
- « первая
- ‹ предыдущая
- …
- 11
- 12
- 13
- 14
- 15
- …
- следующая ›
- последняя »