Frodo_Torbins Varenik и я сам Мы тут с вами наверное, вконец запутали человека
JohnSilver182 Я бы порекомендовал, все таки, почитать какую-нибудь литературу сперва, чтобы сложилось хоть какое-то представление... А потом уже - к нам...
От себя еще добавлю 5 копеек:
Ф-ция Assigned НЕ ПРОВЕРЯЕТ, РАСПРЕДЕЛЕНА ЛИ ПАМЯТЬ по данному указателю, а всего лишь проверяет указатель на равенство nil.. Цитата из справки:
Цитата: Assigned function
Tests for a nil (unassigned) pointer or procedural variable.
Таким образом, на самом деле:
Код: var p1,p2:^integer; // Объявить указатель на целое
begin
new(p1);new(p2); // Отвести под указатели области памяти
p1^:=1; // Указателю p1 указывать на 1
p2:=p1; // Указателю p2 указывать на ту же 1
dispose(p1); // Освобождаем память, на которую указывает указатель.
// После этого указатель p1 НЕ СТАНОВИТСЯ равным nil,
// и не меняет своего значения!!! Просто та область памяти,
// на которую он указыват, уже не существует!!!
if Assigned(p2) then // Аналогично - память, на которую указывает p2 уже не
// существует, мы ее освободили вызовом dispose(p1),
// однако p2 <> nil (p2 попрежнему имеет значение того
// адреса, по которому когда-то была распределена память),
// поэтому Assigned(p2) = true
dispose(p2); // тут справедливый эксцершен, а что ж ты хотел...