Что такое “ошибка присвоения нулевого указателя”?

Один из вопросов о собеседовании на указателях C здесь следующий: что такое ошибка присвоения нулевого указателя?

Я погуглил некоторое время и не вижу разумного объяснения.Что это? Попытка записать через нулевого указателя? Что-то архитектура - или определенный для среды? Какова точно та ошибка?

13
задан sharptooth 4 May 2010 в 07:45
поделиться

1 ответ

http://www.faqs.org/qa/qa-3786.html

Присвоение указателя NULL - это ошибка времени выполнения. Она возникает по разным причинам, одна из которых заключается в том, что ваша программа попыталась получить доступ к недопустимому участку памяти. Незаконное местоположение означает, что оно находится либо в адресном пространстве операционной системы, либо в пространстве памяти другого процесса. В файле stdio.h NULL определяется как 0. Поэтому всякий раз, когда ваша программа пытается обратиться к 0-му месту, операционная система убивает вашу программу с ошибкой присвоения во время выполнения, потому что 0-е место находится в адресном пространстве операционной системы, а операционная система не разрешает доступ к своему адресному пространству пользовательской программе.

Пример кода:

int* ptr = NULL;  
*ptr = 3;

Объяснение:
Почти в каждой системе адрес 0 зарезервирован. Система не позволит вам записать в это место. Если вы попытаетесь, то получите исключение времени выполнения (нарушение доступа, segmentation fault и т.д.).

20
ответ дан 1 December 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: