J'ai une structure qui contient uniquement des pointeurs vers la mémoire que j'ai alloués. Existe-t-il un moyen de libérer récursivement chaque élément qui est un pointeur plutôt que d'appeler gratuitement sur chacun d'eux?Libération récursive des structures C
Par exemple, disons que j'ai cette mise en page:
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;
Et dans mon code, je malloc chacun des struct pour créer un modèle:
model* mdl = malloc (...);
mdl->vertices = malloc (...);
mdl->normals = malloc (...);
mdl->uv_coords = malloc (...);
mdl->quads = malloc (...);
mdl->triangles = malloc (...);
Il est facile de libérer chaque pointeur comme si:
free (mdl->vertices);
free (mdl->normals);
free (mdl->uv_coords);
free (mdl->quads);
free (mdl->triangles);
free (mdl);
Est-il possible que je puisse récursive itérer les pointeurs dans mdl Rathe r qu'appeler gratuitement sur chaque élément?
(Dans la pratique, il est à peine tout travail juste écrire libre() pour chacun d'eux, mais il réduirait la duplication de code et être utile pour apprendre)
Ah intelligent, merci! Bien que cette solution semble sale, elle évite la duplication de code sans pénalité de performance et c'est une approche que je n'avais jamais vue auparavant. Je ne l'utiliserais probablement pas en pratique, mais il répond à ma question par une implémentation intéressante plutôt que de simplement réorganiser le code. – Kai
Ne pourriez-vous pas faire l'opération pour effectuer un argument à la macro, plutôt que d'avoir à le "re-définir" à chaque fois? –
Je pense que vous abusez du mot "abus" ici. Ce genre de truc est fait pour le préprocesseur, je pense! abus -> utiliser :) – Gewure