У меня есть две функции:
void free_this(THIS *this)
{
THIS *this_tmp;
while (this_tmp = this)
{
if (this->str)
free(this->str);
this = this_tmp->next;
free(this_tmp);
}
}
void free_that(THAT *that)
{
THAT *that_tmp;
while (that_tmp = that)
{
if (that->id)
free(that->id);
that = that_tmp->next;
free(that_tmp);
}
}
Поскольку они очень похожи, я пытался придумать одну функцию, чтобы справиться с ними обоими. Я уже могу просто использовать указатель, чтобы указать на правильные данные для освобождения (т.е. указать либо str из этой структуры, либо id этой структуры), однако я не могу понять, как обойти, с каким типом структуры имеют дело поскольку я не могу просто использовать указатель void, поскольку в void * нет члена с именем NEXT.
Есть идеи?
Может быть, я должен как-то объединить две структуры ЭТО и ЭТО в одну? вот они:
typedef struct this {
struct this *next;
char *str;
} THIS;
typedef struct that {
struct that *next;
char *id;
unsigned short result;
OTHERTHING *optr;
} THAT;
Могу ли я как-нибудь использовать функцию offsetof для получения следующего элемента?