История изменений
Исправление
ckotinko,
(текущая версия)
:
оно отсутствует потому что С делали во времена PDP11, VAX и прочей сраной interdatы. undefined null pointer был у них потому, что на PDP11 и VAX по нулевому указателю лежал ноль, и в те годы дереференсить нулевой указатель было нормально. в interdatе вообще это была нормальная память, туда можно было насрать и почитать.
то есть undefined было вполне реальным, и слово undefined несло вполне реальную нагрузку: можно было насрать в управляющий регистр, например, или напороться на разницу в поведении процессоров.
Где эти процы-то? Их в музее уже не найдешь. Для null pointer поведение определено на уровне ОС. Был такой баг, когда пульсу мапали в нулевые адреса, писали туда «звук», и при обращении по нулевому указателю выполняли этот «звук». Это пофиксили, запретив наглухо первые N килобайт(64 по моему) на уровне ведра. Но null pointer - не баг. Если пишешь ведро загружаемое через граб, то null pointer при CR0.PG=0 он вполне нормальный и указывает в начало таблицы адресов прерываний в 16битном режиме.
Исходная версия
ckotinko,
:
оно отсутствует потому что С делали во времена PDP11, VAX и прочей сраной interdatы. undefined null pointer был у них потому, что на PDP11 и VAX по нулевому указателю лежал ноль, и в те годы дереференсить нулевой указатель было нормально. в interdatе вообще это была нормальная память, туда можно было насрать и почитать.
Где эти процы-то? Их в музее уже не найдешь. Для null pointer поведение определено на уровне ОС. Был такой баг, когда пульсу мапали в нулевые адреса, писали туда «звук», и при обращении по нулевому указателю выполняли этот «звук». Это пофиксили, запретив наглухо первые N килобайт(64 по моему) на уровне ведра. Но null pointer - не баг. Если пишешь ведро загружаемое через граб, то null pointer при CR0.PG=0 он вполне нормальный и указывает в начало таблицы адресов прерываний в 16битном режиме.