Say I have declared a pointer to a struct and assign it with malloc() using this definition
typedef struct node {
int info;
struct node *next;
} NODE
When you do
node1 = malloc(sizeof(NODE));
you have something like
+-------+ +-----------------------------+ | node1 | ---> | memory for a NODE structure | +-------+ +-----------------------------+
After the assignment node2 = node1
you have instead this:
+-------+ | node1 | -\ +-------+ \ +-----------------------------+ >-> | memory for a NODE structure | +-------+ / +-----------------------------+ | node2 | -/ +-------+
In other words you have two pointers pointing to the same memory.
Attempting to call free
using either of the two pointer variable will invalidate both pointers.