Liberación recursiva de estructuras de C

Tengo una estructura que solo contiene punteros a la memoria que he asignado. ¿Hay alguna manera de liberar recursivamente cada elemento que es un puntero en lugar de llamar gratis a cada uno?

Por ejemplo, digamos que tengo este diseño:

typedef struct { ... } vertex;
typedef struct { ... } normal;
typedef struct { ... } texture_coord;

typedef struct
{
    vertex* vertices;
    normal* normals;
    texture_coord* uv_coords;
    int* quads;
    int* triangles;
} model;

Y en mi código malloc cada una de las estructuras para crear un modelo:

model* mdl = malloc (...);
mdl->vertices = malloc (...);
mdl->normals = malloc (...);
mdl->uv_coords = malloc (...);
mdl->quads = malloc (...);
mdl->triangles = malloc (...);

Es sencillo liberar cada puntero así:

free (mdl->vertices);
free (mdl->normals);
free (mdl->uv_coords);
free (mdl->quads);
free (mdl->triangles);
free (mdl);

¿Hay alguna forma de que pueda iterar recursivamente a través de los punteros en mdl en lugar de llamar gratis a cada elemento?

(n la práctica, casi no es trabajo escribir free () para cada uno, pero reduciría la duplicación de código y sería útil aprender de)

Respuestas a la pregunta(16)

Su respuesta a la pregunta