Одним из общих источников ошибок при работе с указателями
является разыменование указателя, который еще не был инициализи-
рован. Как и в случае других переменных Паскаля, значение пере-
менной-указателя не будет определено, пока вы не присвоите ей
значение, так что она сможет указывать на какой-то адрес в памя-
ти.
Перед использованием указателей им всегда нужно присваивать
значения. Если вы разыменовываете указатель, которому еще не
присвоено значение, то считанные из него данные могут представ-
лять собой случайные биты, а присваивание значения указываемому
элементу может затереть другие данные, вашу программу или даже
операционную систему. Это звучит несколько пугающе, но при опре-
деленной дисциплине такие вещи легко отслеживаются.
Использование пустого указателя
Чтобы избежать разыменования указателей, которые не указыва-
ют на что-либо значащее, нужен некоторый способ информирования о
том, что указатель недопустим. В Паскале предусмотрено зарезерви-
рованное слово nil, которое вы можете использовать в качестве со-
держательного значения указателей, которые в данный момент ни на
что не указывают. Указатель nil является допустимым, но ни с чем
не связанным. Перед разыменованием указателя вы должны убедиться,
что он отличен от nil (не пуст).
Предположим, например, что у вас есть функция, возвращающая
указатель на некоторый элемент в памяти. Вы можете указать, что
такая функция не может найти элемент, возвращая значение nil.
var ItemPointer: Pointer;
function FindIten: Pointer;
begin
.
.
.
{ найти элемент, возвращая указатель на него или nil,
если элемент не найден }
end;
begin
ItemPointer := nil; { начнем в предположении nil }
ItemPointer := FindItem; { вызвать функцию }
if ItemPointer <> nil then ... { для надежности разымено-
вания ItemPointer }
end.