Работа с динамическими переменными

 

Обратиться к динамической переменной можно с помощью операции разыменования :

 
 


Это выражение является переменной базового типа указателя. Разыменование нетипизованных указателей не имеет смысла.

После размещения динамической переменной в «куче» значение ее не определено и требуется инициализация. С помощью указателей, описанных в примере 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] - элемент массива.