TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Разыменование неинициализированных указателей 

             Одним из  общих  источников  ошибок при работе с указателями
        является разыменование указателя,  который еще не был инициализи-
        рован. Как  и в случае других переменных Паскаля,  значение пере-
        менной-указателя не будет определено,  пока вы  не  присвоите  ей
        значение, так  что она сможет указывать на какой-то адрес в памя-
        ти.

             Перед использованием указателей им всегда нужно  присваивать
        значения. Если  вы  разыменовываете  указатель,  которому  еще не
        присвоено значение,  то считанные из него данные могут  представ-
        лять собой  случайные биты,  а присваивание значения указываемому
        элементу может затереть другие данные,  вашу программу  или  даже
        операционную систему.  Это звучит несколько пугающе, но при опре-
        деленной дисциплине такие вещи легко отслеживаются.

                         Использование пустого указателя

             Чтобы избежать разыменования указателей, которые не указыва-
        ют на что-либо значащее,  нужен некоторый способ информирования о
        том, что указатель недопустим. В Паскале предусмотрено зарезерви-
        рованное слово 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.

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz