Dispose(p2); { … а вторую – уже нельзя! }

end.

Здесь вторая переменная существует и после того, как указатель p2 переключился на первую. Но связь с нею потеряна навсегда, эту переменную нельзя даже освободить! Так объём свободной памяти в куче уменьшается, что и породило выражение «утечка памяти».

К счастью, после завершения программы операционная система сама освободит всю занятую программой память, включая потерянные участки. Не тревожьтесь – память вашего компьютера не пострадает!

В последующих главах мы построим несколько «боевых» программ с применением динамических переменных.

Итоги

• В задачах, где нельзя предсказать объём обрабатываемых данных, используют динамические переменные.

• Память для динамических переменных выделяется из кучи – области свободной памяти, которой «заведует» операционная система.

• У динамических переменных нет имен, поэтому доступ к ним возможен только через указатели.

• Для выделения памяти вызывают процедуру New, она помещает в указатель адрес созданной переменной.

• Когда надобность в динамической переменной отпадает, занятую ею память освобождают процедурой Dispose.

• Обращение с динамическими переменными требует аккуратности; остерегайтесь таких ошибок, как висячие ссылки и утечка памяти.

А слабо?

А) Сравните размеры переменных и указателей на них, воспользуйтесь для этого следующей программкой. Напишите нечто подобное для переменных других типов.

type pb = ^byte; pw = ^word; pe = ^extended;

var b : byte; w : word; e : extended;

begin

      Writeln(SizeOf(b):5, SizeOf(pb):5);

      Writeln(SizeOf(w):5, SizeOf(pw):5);

      Writeln(SizeOf(e):5, SizeOf(pe):5);

      Readln;

end.

Б) Найдите ошибки в следующей программе и объясните их.

var p1, p2 : ^integer;

begin

      p1 := 10;

      p2^:= 20;

      New(p1);

      p2:= p1;

      p1^:= 'Привет!';

      Dispose(p1);

      Dispose(p2);

end.

Задачи на темы предыдущих глав

В) Ник обожал музыку. Но компьютерный музыкальный проигрыватель раздражал программиста, поскольку при случайном выборе мелодий повторял одни песни, напрочь забывая о других. Предположим, в списке 10 песен, но звучали только три из них: 3, 6, 5, 6, 3, 6, 5 и т.д.

Ник создал «справедливый» проигрыватель, выбирающий мелодии иначе. Все песни состояли в одном из двух списков: «белом» или «черном». Изначально все они были в «белом» списке, и очередная мелодия выбиралась из него случайно, а после проигрывания ставилась в конец «черного». Если в этот момент в «черном» списке состояла половина мелодий, то первая мелодия из «черного» списка возвращалась в «белый». Затем снова случайно выбиралась мелодия из «белого» списка. Так гарантировалось отсутствие повторов ранее проигранных песен в течение достаточно длительного времени. Создайте программу, генерирующую случайные числа (мелодии) в диапазоне от 1 до N представленным выше методом. Значение N не превышает 255.

Вы читаете Песни о Паскале
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату