C - удаление n-арных узлов дерева

Я реализовал в C a m,n,k-игру с AI. Игра работает нормально, но когда мне нужно освободить дерево решений, оно всегда выдает исключение "Место чтения нарушения доступа".

Это реализация структуры дерева решений:

typedef struct decision_tree_s {
    unsigned short **board;
    status_t status;
    struct decision_tree_s *brother;
    struct decision_tree_s *children;
} decision_tree_t;


И это реализация delete_tree функция:

void delete_tree(decision_tree_t **tree) {
    decision_tree_t *tmp;

    if (*tree != NULL) {
        delete_tree((*tree)->children);
        delete_tree((*tree)->brother);

        free(*tree);
        *tree = NULL;
    }
}

1 ответ

Решение

Вы уничтожаете в два раза children член: впервые в for цикл, второй раз после цикла.

Вы можете написать свой цикл for следующим образом:

for (tmp = tree->brother; tmp != NULL; tmp = tmp->brother) {
    delete_tree(tmp);
}
Другие вопросы по тегам