TURBO PASCAL |
Новости
|
Разыменование неинициализированных указателейОдним из общих источников ошибок при работе с указателями является разыменование указателя, который еще не был инициализи- рован. Как и в случае других переменных Паскаля, значение пере- менной-указателя не будет определено, пока вы не присвоите ей значение, так что она сможет указывать на какой-то адрес в памя- ти. Перед использованием указателей им всегда нужно присваивать значения. Если вы разыменовываете указатель, которому еще не присвоено значение, то считанные из него данные могут представ- лять собой случайные биты, а присваивание значения указываемому элементу может затереть другие данные, вашу программу или даже операционную систему. Это звучит несколько пугающе, но при опре- деленной дисциплине такие вещи легко отслеживаются. Использование пустого указателя Чтобы избежать разыменования указателей, которые не указыва- ют на что-либо значащее, нужен некоторый способ информирования о том, что указатель недопустим. В Паскале предусмотрено зарезерви- рованное слово 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. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |