Search code examples
cpointers

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


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?


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.