Why I can\'t dereference a null pointer? That is, why I can\'t read/write memory which address is simply 0?
Does the base pointer of my process have a different addr
C 2011 online draft
6.3.2.3 Pointers
...
3 An integer constant expression with the value 0, or such an expression cast to typevoid *, is called a null pointer constant. 66) If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
66) The macroNULLis defined in(and other headers) as a null pointer constant; see 7.19.
Emphasis mine. NULL is defined to be an invalid pointer value that represents a well-defined "nowhere". You can't dereference it because there's nothing to dereference. Note that although the null pointer constant is always 0-valued, the null pointer value doesn't have to be; it can be 0x00000000 or 0xDEADBEEF or something completely different; that's up to the platform.
TL;DR, NULL doesn't represent address 0; it represents "no address".