В ваших структурах почти наверняка не должно содержаться таких членов, как:
time_t *modtimes;
mode_t *modes;
bool *exists;
Вместо этого вы должны просто использовать:
time_t modtimes;
mode_t modes;
bool exists;
Таким образом, вам не нужно их динамически распределять,или впоследствии отпустите их.Причины в том, что а) они маленькие и б) их размер известен заранее.Вы будете использовать:
char *name;
для строкового поля, потому что оно не маленькое, и вы заранее не знаете, насколько оно велико.
В другом месте кода, у вас есть следующее:
if(top)
{
PEOPLE *info;
info = malloc(sizeof(PEOPLE *));
}
Если top имеет значение true, тогда этот код выделяет указатель, а затем сразу же пропускает его - область действия второго info ограничивается оператором if, поэтому вы не можете использовать его позже и не можете выпустить позже.Вам нужно сделать что-то вроде этого:
PEOPLE *process(PEOPLE *info, ...)
{
if (top)
{
info = malloc(sizeof(PEOPLE));
}
info->name = strdup("Henry James");
info->exists = true;
return info;
}