Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
При выполнении программы наступает момент, когда необходимо использовать динамическую память, т.е. выделить её в нужных видах, разместить там какие-то данные, поработать с ними, а после того, как в данных отпадет необходимость - освободить выделенную память.
Динамическая память может быть выделена двумя способами:
1. С помощью стандартной процедуры New:
New (P);
где р - переменная типа «типизированный указатель».
Эта процедура создает новую динамическую переменную (выделяет под нее участок памяти) и устанавливает на нее указатель P (в P записывается адрес выделенного участка памяти). Размер и структура выделяемого участка памяти задается размером памяти для того типа данных, с которым связан указатель P. Доступ к значению созданной переменной можно получить с помощью P^.
2. С помощью стандартной процедуры GetMem.
GetMem (P,size);
где P - переменная типа «указатель» требуемого типа.
size - целочисленное выражение размера запрашиваемой памяти в байтах.
Эта процедура создает новую динамическую переменную требуемого размера и свойства, а также помещает адрес этой созданной переменной в переменную Р типа «указатель». Доступ к значению созданной переменной можно получить с помощью P^.
Например:
Type
Rec =record
Field1:string[30];
Field2:integer;
End;
ptr_rec = ^ rec;
Var
p: ptr_rec;
Begin
GetMem(Р, SizeOf (Rec)); { Выделение памяти, адрес выделенного участка фиксируется в Р; размер этой памяти в байтах определяет и возвращает стандартная функция SizeOf, примененная к описанному типу данных; однако, зная размеры внутреннего представления используемых полей, можно было бы подсчитать размер памяти «вручную» и записать в виде константы вместо SizeOf (Rec) }
...
{использование памяти}
...
FreeMem(p, SizeOf(Rec)); {освобождение уже ненужной памяти}
...
Динамическая память может быть освобождена четырьмя способами.
1. Автоматически по завершении всей программы.
2. С помощью стандартной процедуры Dispose.
Дата публикования: 2014-11-04; Прочитано: 336 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!