What exactly is meant by "de-referencing a NULL pointer"?

c, pointers

Solution

A `NULL` pointer points to memory that doesn't exist. This may be address `0x00000000` or any other implementation-defined value (as long as it can never be a real address). Dereferencing it means trying to access whatever is pointed to by the pointer. The `*` operator is the dereferencing operator:

int a, b, c; // some integers
int *pi;     // a pointer to an integer

a = 5;
pi = &a; // pi points to a
b = *pi; // b is now 5
pi = NULL;
c = *pi; // this is a NULL pointer dereference

This is exactly the same thing as a `NullReferenceException` in C#, except that pointers in C can point to any data object, even elements inside an array.

Problem

I am a complete novice to C, and during my university work I've come across comments in code that often refer to de-referencing a NULL pointer. I do have a background in C#, I've been getting by that this might be similar to a "NullReferenceException" that you get in .Net, but now I am having serious doubts. Can someone please explain to me in layman's terms exactly what this is and why it is bad?

Original source