The cited incorrect assumption was &quot;null pointer dereferences are guaranteed to crash the program&quot;, which is, as you implied, not true because it won&#x27;t <i>necessarily</i> crash the program.  C places additional restrictions which say that the program can actually do anything (undefined behaviour).<p>The main reason I keep coming back to assembly language with C, is that C <i>cannot</i> do anything that assembly language cannot do.  It only places additional restrictions on assembly, which is a bit easier to grasp (bitwise operations, add, subtract etc.).  Once you understand the fundamental operations of the processor, you can start to learn the copious corner cases that is the C programming language.