psa1974
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 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); // тут справедливый эксцершен, а что ж ты хотел... | Думаю, корректнее подобные коды заключать в блоки try...finally типа такого: Код: var p1,p2:^integer; // Объявить указатель на целое begin new(p1); new(p2); // Отвести под указатели области памяти try p1^:=1; // Указателю p1 указывать на 1 p2:=p1; // Указателю p2 указывать на ту же 1 finally dispose(p1); // Что бы не случилось между try...finally, по любому // освобождаем память, на которую указывает указатель. // После этого указатель p1 НЕ СТАНОВИТСЯ равным nil, // и не меняет своего значения!!! Просто та область памяти, // на которую он указыват, уже не существует!!! p1:= nil; p2:= nil; // обнуляем указатели // теперь Assigned(p2) равно как и Assigned(p1) даст ложь end; end; | | Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 21:12 27-10-2009 | Исправлено: psa1974, 21:15 27-10-2009 |
|