Search code examples
cpointersnullundefined-behavior

Incrementing NULL pointer in C


If I incrementing NULL pointer in C, then What happens?

#include <stdio.h>

typedef struct
{
        int x;
        int y;
        int z;
}st;

int main(void)
{
        st *ptr = NULL;
        ptr++; //Incrementing null pointer 
        printf("%d\n", (int)ptr);
        return 0;
}

Output:

12

Is it undefined behavior? If No, then Why?


Solution

  • The behaviour is always undefined. You can never own the memory at NULL.

    Pointer arithmetic is only valid within arrays, and you can set a pointer to an index of the array or one location beyond the final element. Note I'm talking about setting a pointer here, not dereferencing it.

    You can also set a pointer to a scalar and one past that scalar.

    You can't use pointer arithmetic to traverse other memory that you own.