Турбо отладчик (Turbo Debugger) 3.0

если указатель имеет значение 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.
                 Неправильное использование области действия
       -----------------------------------------------------------------

Содержание раздела