C - liberando estruturas
Vamos dizer que eu tenho essa estrutura
typedef struct person{
char firstName[100], surName[51]
} PERSON;
e estou alocando espaço por malloc e preenchendo com alguns valores
PERSON *testPerson = (PERSON*) malloc(sizeof(PERSON));
strcpy(testPerson->firstName, "Jack");
strcpy(testPerson->surName, "Daniels");
Qual é a maneira correta e segura de liberar toda a memória tomada por essa estrutura? É "livre (testPerson);" o suficiente ou eu preciso liberar o atributo de cada estrutura, um por um?
Isso me leva a outra questão: como as estruturas são armazenadas na memória? Eu notei um comportamento estranho - quando tento imprimir o endereço da estrutura é igual ao endereço do primeiro atributo.
printf("Structure address %d == firstName address %d", testPerson, testPerson->firstName);
O que significa que este livre (testPerson) deve ser igual a este livre (testPerson-> firstName);
e não é isso que eu quero fazer.
obrigado