Основы программирования. Указатели. Динамические структуры данных. Абстрактные типы данных. Классы - 16 стр.

UptoLike

Составители: 

18
begin
New(pi);
end;
Данная процедура составлена ошибочно: локальный указатель pi уничтожается
после завершения работы процедуры, поэтому контролируемая им динамическая
память «утекает». Особенно опасна подобная утечка при вызове такой процедуры
в цикле:
for i:=1 to MaxInt do
pp;
4. Память, выделенная динамически для глобальных переменных-указателей,
не возвращается явно в конце программы.
Поскольку динамическая память
автоматически освобождается в конце рабо-
ты программы, отсутствие явного вызова Dispose или FreeMem для глобальных
переменных-указателей на динамическую память не может считаться ошибкой и
свидетельствует просто о неаккуратности программирования. Однако при перено-
се текста основной программы в процедуру мы получим ошибку утечки памяти,
описанную в предыдущем пункте.
5. Попытка освободить динамическую память
, не выделенную ранее.
var pi: ^integer;
begin
Dispose(pi);
Подобная ошибка приводит к немедленной генерации исключения, поэтому не
принадлежит к числу опасных. Заметим, что в Delphi вызов процедуры Dispose
для нулевого указателя просто игнорируется, не приводя к генерации исключе-
ния.
6. Попытка дважды освободить занимаемую память.
var pi: ^integer;
begin
New(pi);
...
Dispose(pi);
Dispose(pi);
При повторном вызове процедуры Dispose будет
сгенерировано исключение.
7. Попытка освободить нединамическую память.
var pi: ^integer;
i: integer;
begin
pi:=@i;
Dispose(pi);