ВУЗ:
Составители:
Рубрика:
19
При вызове Dispose для нединамической переменной будет сгенерировано ис-
ключение.
8. Выход за память, выделенную процедурой GetMem.
Поскольку GetMem выделяет количество памяти, не зависящее от размера
объекта, с которым связан указатель, она менее безопасна, чем New. Например,
при реализации с помощью GetMem динамического массива можно предпринять
попытку обратиться за границы выделенной
памяти:
GetMem(dyn,n*sizeof(integer));
dyn^[n+1]:=5;
Обычно такая ошибка приводит к исключению Access Violation.
2 Динамические структуры данных
2.1 Общие сведения
Данные могут объединяться в структуры. Примерами структур являются
массивы и записи. Но эти структуры во время выполнения программы имеют по-
стоянный размер, то есть являются статическими. Если же размер структуры ме-
няется в процессе работы программы, то такая структура данных называется ди-
намической. Один из способов создать динамическую структуру данных – соста
-
вить ее из однотипных элементов-записей, каждая из которых, помимо полей
данных, имеет поля связи, указывающие на другие элементы. В простейшем слу-
чае имеется одно поле связи, которое хранит адрес следующего элемента или
nil, если следующий элемент отсутствует.
Попытаемся описать тип элемента такой структуры:
type
Node=record
data: integer;
next: ^Node; // ошибка!
end;
Данное определение в Delphi Pascal ошибочно. Проблема состоит в том, что тип
Node частично определяется через самого себя (рекурсия по данным) и к моменту
определения поля next: ^Node тип Node еще не определен полностью. Пробле-
ма решается следующим образом: определяется тип PNode=^TNode, после чего
определяется тип Node, в котором поле next имеет тип
PNode:
type
PNode=^Node;
Node=record
data: integer;
next: PNode;
end;
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »