Указатели, динамически формируемые массивы и строки, страница 2

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

До использования процедур New и GetMem значения указателей не определены и работать с ними нельзя. Часто используют обнуление указателей, чтобы избежать ошибок.

Если в программе пропустить операторы выделения памяти (обнуления), возникает неконтролируемая ошибка. При выделении динамической памяти можно использовать функции:

  • MemAvail – возвращает общий объём свободной памяти в байтах
  • MaxAvail – возвращает размер наибольшего непрерывного участка памяти.

Существует несколько способов освобождения памяти, занятой динамическими переменными:

  • Dispose (p) – для типизированных переменных
  • Mark (p)..Release (p)

Эти команды используются совместно и позволяют очистить целую область памяти, расположенную между Mark и Release.

  • FreeMem (p, <размер памяти>) – используется для очистки памяти выделенной с помощью нетипизированных указателей.

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

  • работа с массивами больших размеров
  • работа с динамическими структурами данных.

Динамически формируемые массивы и строки

Объявление указателя на массив:

TypetMas = Array [1..10000] of Integer;

pMas = ^tMas;

Var Mas : pMas;

При таком описании память будет выделена только под указатель Mas. В процессе работы программы необходимо будет выделить память под массив с помощью одной из команд.

New(p)

GetMem (p, N*SizeOf (Integer));


Задание 1

Составить и выполнить программу, заносящую информацию о студентах из предыдущих работ и сортирующая записи по возрасту.

Program Lab03_01;

   Type

      Point = Record

         x,y:Real;

      End;