C - uwalniające struktury

Powiedzmy, że mam tę strukturę

typedef struct person{
    char firstName[100], surName[51]
} PERSON;

i przydzielam miejsce przez malloc i wypełniając je pewnymi wartościami

PERSON *testPerson = (PERSON*) malloc(sizeof(PERSON));
strcpy(testPerson->firstName, "Jack");
strcpy(testPerson->surName, "Daniels");

Jaki jest prawidłowy i bezpieczny sposób uwolnienia całej pamięci zajmowanej przez tę strukturę? Jest „wolny (testPerson)”; wystarczy czy muszę uwolnić atrybut każdej struktury po kolei?

Prowadzi mnie to do kolejnego pytania - jak struktury są przechowywane w pamięci? Zauważyłem dziwne zachowanie - kiedy próbuję wydrukować adres struktury, jest on równy adresowi pierwszego atrybutu.

printf("Structure address %d == firstName address %d", testPerson, testPerson->firstName);

Co oznacza, że ​​ten darmowy (testPerson) powinien być równy temu free (testPerson-> firstName);

i nie to chcę robić.

Dzięki

questionAnswers(7)

yourAnswerToTheQuestion