C - Si se utiliza realloc, ¿es necesario gratis?

Cuando se usa realloc, ¿se libera automáticamente la memoria? ¿O es necesario usar gratis con realloc? ¿Cual de los siguientes es correcto

//Situation A
ptr1 = realloc(ptr1, 3 * sizeof(int));

//Situation B
ptr1 = realloc(ptr2, 3 * sizeof(int));
free(ptr1);
ptr1 = ptr2;