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);
и это не то, что я хочу сделать.
Спасибо