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);
}