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
node1 is a pointer, meaning the value of it is the virtual memory address of the allocated struct.
node1
Assigning node2 = node1 just copies that address.
node2 = node1
As a result free(node1) and free(node2) are equivalent.
free(node1)
free(node2)