2015-06-04 3 views
-1

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

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

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; 
    } 
} 
+0

Я редактировал функцию удаления дерева обратно, как это было в самом начале проекта, и теперь удаление дерева, кажется, работает хорошо. –

ответ

0

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

Вы можете написать свой цикл, как, что:

for (tmp = tree->brother; tmp != NULL; tmp = tmp->brother) { 
    delete_tree(tmp); 
} 
+0

По-прежнему получает ту же ошибку. –

Смежные вопросы