Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Висящие ссылки



Висящая ссылка (указатель) - это существующий в программе указатель, который открывает доступ к уже несуществующему объекту (т.е. к уже освобожденному участку памяти). Возникновение висящей ссылки иллюстрирует программный фрагмент и рис. 49.

...

var p,q: PList;

begin

new (p); q:=p;

...

dispose(p); p:=nil;

{ q – висящая ссылка }

end;


Рис. 49. Возникновение висящей ссылки

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

Type

PT1 = ^ T1; PT2 = ^ T2;

T1 = record T2 = record

x, y: word a: byte; b: char; c: integer

end; end;

Var p, q: PT1; r: PT2;

...

new (p);

readln (p^.x, p^.y);

q:=p;

...

dispose (p); p:=nil;

...

new (r);

readln(r^.a);

readln(r^.b);

readln(r^.c);

...

writeln(q^.x); {? }

writeln(q^.y); {? }

Рис. 50. Ошибочное применение висящего указателя

Через указатель q по-прежнему видна структура, соответствующая объекту типа Т1 с атрибутами х и у, ранее размещенному в том блоке памяти, который позже был зарезервирован для объекта типа Т2 с атрибутами а, в, с. Результат применения в программе висящей ссылки приводит к ошибкам, которые трудно обнаружить, поэтому висящие ссылки “опаснее” накопления мусора.

Проблему висящих ссылок можно было бы решить, если бы администратор реализовывал метод счетчиков ссылок. В этом методе для каждого зарезервированного блока имеется счетчик, показывающий, сколько объектов программы имеют непосредственный доступ к этому блоку, т.е. указатель на него. Когда некоторый блок резервируется впервые, его счетчик ссылок устанавливается в 1. Каждый раз, когда создается связь между некоторым идентификатором и этим блоком, значение счетчика ссылок увеличивается на 1; каждый раз, когда такая связь уничтожается, значение счетчика ссылок уменьшается на 1. Когда значение счетчика ссылок становится равным нулю, соответствующий блок оказывается недоступным, а, следовательно, неиспользуемым. В этот момент он возвращается в список свободной памяти. Однако ведение счетчиков ссылок может значительно увеличить время исполнения программы, поэтому в администраторах этот метод практически не используется, а контроль за отсутствием висящих ссылок возлагается на программиста.

5. множественная интерпретация объектов





Дата публикования: 2014-11-26; Прочитано: 252 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...