Почему выдается исключение (нарушение прав чтения), когда я обращаюсь к указателю NULL? - PullRequest
0 голосов
/ 28 октября 2019

Поскольку указатель NULL присваивает своему значению ноль.

  1. Когда я пытаюсь выполнить указатель на нулевой указатель, возникает исключение, почему это так? Ноль не выводится.

  2. имеет ли нулевое значение какой-либо адрес?

Пример кода:

int main()
{
    int *q = NULL;
    cout << *q;
    return 0;
}

1 Ответ

1 голос
/ 28 октября 2019

Значение (т. Е. Адрес), сохраненное в указателе, может находиться в одном из четырех состояний:

  1. Может указывать на объект.
  2. Может указывать наместоположение сразу после конца объекта.
  3. Это может быть нулевой указатель, указывающий, что он не связан ни с одним объектом.
  4. Может быть недопустимым;значения, отличные от предыдущих трех, являются недопустимыми.

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

Хотя указатели в случаях 2 и 3 действительны, существуют ограничения на то, что мы можем сделать с такими указателями. Поскольку эти указатели не указывают на какой-либо объект, мы не можем использовать их для доступа к (предполагаемому) объекту, на который указывает указатель. Если мы попытаемся получить доступ к объекту с помощью таких указателей, поведение будет undefined.

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