Как правильно очищать память у массива обьектов содержащего другие массивы обьектов? - си

К примеру у меня есть:

struct A {
    int size;
    int * array_int;
};

struct B {
    int size;
    struct A * array_A;
};

struct B * main_array;

где struct A * array_A, struct B * main_array и int * array_int массивы с динамически выделенной памятью.

Что требуется сделать чтобы очистить память от массива struct B * main_array? Следует в начале очистить память для всех под-обьектов или же можно просто очистить память для внешнего массива?


Ответы (1 шт):

Автор решения: AlexGlebe

Программа будет яснее и короче, если будете рекурсивно всё удалять. А это значит, сначала сыновья.

for( x из main_array )
  DestructorB( x );
free(main_array);

void DestructorB(struct B * const b) {
  for(size_t i = 0 ;i<b->size;++i)
    DestructorA(b->array_A+i);
  free(b->array_A); }

void DestructorA(struct A * const a) {
  free(a->array_int); }
→ Ссылка