void *a = malloc();

case 1)
 void *p = a;
 free(a);
 ....
 *p 等を使ったコード

case 2)
 void *p = a; a = NULL;
 free(a);
 ....
 *p 等を使ったコード

の違いみたいな論理思考
後者の case 2 は a のもちものだったものを p へ移してる