Mind to name implementations that do not catch this? Other than DS9K?
SGI IRIX64 does not catch dereferencing a NULL pointer.
SGI IRIX was designed with an unwritable 4Kb page starting from
address 0, which was then followed in the process address space
by code for the graphics library, with the graphics library code having
been tightly tuned to take advantage of the fact that on that
architecture (MIPS) low virtual addresses could be represented in
shorter instructions (less memory, better use of cache.)
When SGI created its 64 bit operating system, IRIX64 (which included
a substantial amount of backwards compatability, including the
ability to run the prior "32 bit" binaries), it increased its kernel
page size from 4 Kb to 8 Kb. So suddenly the memory page that covered
the 4 Kb to 8 Kb range was a part of the memory page starting from address 0
rather than being a distinct page. In order to provide the accesses
needed for the graphics library, SGI had to unprotect the memory
from virtual address 0 to 8 Kb (minus 1).
In my experience, in this setup, direct writes to address 0 (that
is, direct dereferences of the NULL pointer) were not as common
as writes to addresses with small offsets -- addresses arising
out of code of the form structureptr->field where structureptr
happened to be NULL.
Dereferencing an uninitialized pointer is problematic on many architectures;
if the pointer is an auto variable on a stack, the pointer value could
turn out to be whatever happened to have been in that memory last.
On the processors I have happened to examine, the standard "allocate
a chunk of memory for a stack frame" sequence seldom automatically
zeroed the memory (though the compiler might choose to add instructions
that set it to some particular value.)