Как правильно очищать память у массива обьектов содержащего другие массивы обьектов? - си
К примеру у меня есть:
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); }