Работа с динамическими переменными
Обратиться к динамической переменной можно с помощью операции разыменования :
Это выражение является переменной базового типа указателя. Разыменование нетипизованных указателей не имеет смысла.
После размещения динамической переменной в «куче» значение ее не определено и требуется инициализация. С помощью указателей, описанных в примере 1, могут быть созданы и инициализированы динамические переменные, например, следующим образом:
New(p1); Read(p1^); {Введем 67}
New(p2); p2^:=25;
Изобразим схематично результат выполнения этих операторов:
p1
p2
После выполнения оператора p2^:=p1^ имеем
p1
p2
После присваивания p2:=p1 схема имеет вид
p1
p2
Теперь переменные р1 и р2 ссылаются на одну и ту же область памяти, адрес переменной p2^ до присваивания утерян. Этого не должно быть, так как «засоряется» динамическая память. Перед присваиванием нужно было освободить память, обратившись к процедуре, например, dispose(p2).
Пример 2. Создание и инициализация структурированной динамической переменной p_vect, описанной в примере 1:
New(p_vect);
for i:=1 to 100 do read(p_vect^[i]);
p_vect^ имеет тип t_vect - массив, p_vect^[i] - элемент массива.