C - освобождающие структуры

Допустим, у меня есть эта структура

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

и я выделяю пространство с помощью malloc и заполняю его некоторыми значениями

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

Как правильно и безопасно освободить всю память, занятую этой структурой? Является ли "свободным (testPerson);" достаточно или мне нужно освободить атрибут каждой структуры один за другим?

Это приводит меня к другому вопросу - как структуры хранятся в памяти? Я заметил странное поведение - когда я пытаюсь напечатать структурный адрес, он равен адресу первого атрибута.

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

Это означает, что это free (testPerson) должно быть равно этому free (testPerson-> firstName);

и это не то, что я хочу сделать.

Спасибо