Let's say I have this struct
typedef struct person{
char firstName[100], surName[51]
} PERSON;
and I am allocating space by malloc and filling it with some values
PERSON *testPerson = (PERSON*) malloc(sizeof(PERSON));
strcpy(testPerson->firstName, "Jack");
strcpy(testPerson->surName, "Daniels");
What is the correct and safe way to free all memory taken by that struct? Is "free(testPerson);" enough or do I need to free each struct's attribute one by one?
It leads me to another question - how are structures stored in memory? I noticed a strange behaviour - when I try to print structure address it's equal to it's first attribute's address.
printf("Structure address %d == firstName address %d", testPerson, testPerson->firstName);
Which means that this free(testPerson) should be equal to this free(testPerson->firstName);
and that's not what I want to do.
Thanks
Because you defined the
struct
as consisting ofchar
arrays, the two strings are the structure and freeing thestruct
is sufficient, nor is there a way to free thestruct
but keep the arrays. For that case you would want to do something likestruct { char *firstName, *lastName; }
, but then you need to allocate memory for the names separately and handle the question of when to free that memory.Aside: Is there a reason you want to keep the names after the
struct
has been freed?