Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Pascal и Delphi / Borland Pascal / Использование указателей /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Общие проблемы использования указателей - Программирование от RIN.RU
Общие проблемы использования указателей

Указатели позволяют вам делать в Паскале некоторые важные вещи, но есть пара моментов, которые при работе с указателями нужно отслеживать. При использовании указателей допускаются следующие общие ошибки:


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

  • потери динамически распределяемой памяти ("утечки").




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


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


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


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


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




 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Для чего используются указатели?

Работа с большими объемами данных

Работа с данными неизвестного размера

Работа с временными буферами данных

Связанные списки

Выделение памяти для динамических переменных

Процедуры GetMem и FreeMem

Потери динамически распределяемой памяти

Управление связанным списком

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь