Вообще выделение памяти проверять.
А вот потому что:
#include <stdio.h>
int main()
{
unsigned char *a = NULL;
int b = 0;
unsigned long n = (unsigned long)&b;
printf("b = %d, n = %lu\n",b,n);
a[n]=1;
printf("b = %d\n",b);
return 0;
}
Запуск
$ gcc nullptr.c -o nullptr
$ ./nullptr
b = 0, n = 140731726099148
b = 1
Запускалось в 64-битном (x86_64) Linux. Как видно, никаких сегфолтов и прочих ошибок. Конечно, адрес в районе 127 Тб в примере далеко за пределами доступного почти на всех компьютерах, но нет никаких гарантий, что на какой-то системе с каким-то компилятором и настройками среды значение не окажется более доступным. Могут быть и другие архитектуры (32-битные например), если запускать от root'а, то в начало может быть разрешена запись и там иметься память процесса. Или ещё какие-то варианты.
shdown,
monk,
liksys,
Xenius - я думаю вам понравится. Пример сочинился по ходу чтения обсуждения Вышло издание 2,92 книги «Программирование: введение в профессию» А. В. Столярова (комментарий)



