если указатель имеет значение nil.
ет, если указатель имеет значение nil. Например, предположим, что
у вас имеется линейный связанный список записей, и вы хотите вы-
полнить в нем поиск записи с заданным значением. Ваша программа
TDeb 3.0 #2-3 = 133 =
может выглядеть следующим образом:
function FindNode(Head : NodePtr, Val : integer);
var
Temp : NodePtr;
begin
Temp := Head;
while (Temp^.Key <> Val) and (Tamp <> nil) do
Temp := Temp^.Next
FindNode := Temp
end { FindNode }
Если Val не равно полю Key в каком-либо из узлов связанного
списка, то эта программа, когда Temp имеет значение nil, будет
пытаться вычислить Temp^.Key, что приведет к непредсказуемому по-
ведению. Каково же здесь решение? Нужно записать выражение следу-
ющим образом:
while (Temp <> nil) and (Temp^.Key <> Val)
и разрешить вычисление булевских выражений по короткой схеме (с
помощью директивы Турбо Паскаля {$B-} или команды
Options¦Compiler¦Boolean (Параметры¦Компилятор¦Булевские выраже-
ния)). Таким образом, если Temp не равно nil, второе условие вы-
числяться не будет.
Наконец, не следует предполагать, что указатель устанавлива-
ется в значение nil только потому, что вы передаете его процедуре
Dispose или FreeMem. Указатель будет иметь при этом свое исходное
значение, однако память, на которую он указывает, будет теперь
освобождена, и может использоваться для другой динамической пере-
менной После освобождения структуры данных указатель нужно явным
образом установить в значение nil.
Неправильное использование области действия
-----------------------------------------------------------------