C - estructuras de liberación
Digamos que tengo esta estructura
typedef struct person{
char firstName[100], surName[51]
} PERSON;
y estoy asignando espacio por malloc y llenándolo con algunos valores
PERSON *testPerson = (PERSON*) malloc(sizeof(PERSON));
strcpy(testPerson->firstName, "Jack");
strcpy(testPerson->surName, "Daniels");
¿Cuál es la forma correcta y segura de liberar toda la memoria tomada por esa estructura? Es "free (testPerson)"; ¿Es suficiente o necesito liberar los atributos de cada estructura uno por uno?
Me lleva a otra pregunta: ¿cómo se almacenan las estructuras en la memoria? Noté un comportamiento extraño: cuando intento imprimir la dirección de la estructura es igual a la dirección del primer atributo.
printf("Structure address %d == firstName address %d", testPerson, testPerson->firstName);
Lo que significa que este free (testPerson) debe ser igual a este free (testPerson-> firstName);
y eso no es lo que quiero hacer.
Gracias