Можем ли мы проверить указатель, чтобы убедиться, что это правильный адрес?

0

Моя идея - напечатать объект, на который он указывает. Я думаю, что действительный указатель должен иметь действительный объект. Если мы попытаемся распечатать объект, мы проверим, действителен ли указатель. Я прав?

Показать ещё 1 комментарий
Теги:
pointers
memory-address

2 ответа

1
Лучший ответ

Я думаю, что действительный указатель должен иметь действительный объект.

Да, это определение действительного указателя.

Если мы попытаемся распечатать объект, мы проверим, действителен ли указатель.

К сожалению, вы не можете. Вы можете проверить, является ли указатель нулевым; но если он не был инициализирован должным образом или если он указал на уничтоженный объект, он не будет ни действительным, ни нулевым.

Если вам нужен указатель, достаточно умный, чтобы узнать, действительно ли он действителен, вам понадобится умный указатель.

  • 0
    Как насчет того, чтобы попытаться распечатать то, на что он указывает. Если он дает случайный адрес, он больше не является действительным указателем. Я так и думал. Это правильно?
  • 0
    @JiajuShen: я не знаю, что вы имеете в виду. Все адреса являются «случайными», независимо от того, существует ли действительный объект по этому адресу. Не существует надежного способа определить, указывает ли указатель на действительный объект. Возможно, вы могли бы обнаружить некоторые недействительные указатели, которые не представляют доступный адрес; но недействительный указатель может легко иметь доступный адрес - либо случайно, либо потому, что он указывал на удаленный объект.
0

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

Для простых указателей вы можете инициализировать их нулевым, если вы не знаете, что указатель будет инициализирован в будущем или нет. Затем перед использованием указателя вы можете проверить, является ли оно нулевым или нет.

Но этого недостаточно, неправильно сформированные коды могут иметь неверные указатели, и его программист найдет их трудными. Например, рассмотрим возможность возврата указателя на локальный временный объект, который будет уничтожаться после выхода из функции. Поэтому вы должны управлять ими в коде.

Сначала попробуйте избежать указателей. Если вам это нужно, используйте интеллектуальные указатели. Если вам нужно использовать пустой указатель, напишите хорошо сформированный код и указатели на дорожки, исправив использование распределения/освобождения и нулевого значения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню