Удаление бинарного дерева

143
28 апреля 2018, 18:20

Имеются функции:

struct Tree {
    int key;
    string inf;
    Tree *left;
    Tree *right;
};
    void deleteTree(Tree *&tree) {
        if (tree != NULL) {
            deleteTree(tree->left);
            deleteTree(tree->right);
            delete tree;
        }
    }
    void showTree(Tree *tree, int level) {
        string str;
        if (tree != NULL) {
            showTree(tree->right, level+1);
            for (int i = 0; i < level; i++) {
                str += "    ";
            }
            cout << str << tree->inf << " " << tree->key << endl;
            showTree(tree->left, level+1);
        }
    }

Задача - удаление созданного списка в виде бинарного дерева. Однако после удаления при просмотре выдает следующую ошибку: Вызвано исключение: нарушение доступа для чтения.

tree было 0xDDDDDDDD.

И указывает на строку

showTree(tree->right, level+1);

В чем ошибка и как исправить?

Answer 1

Следует обNULLить указатель после удаления дерева. Ну или лучше nullptr все таки, согласно ++11. Вы то проверяете указатель на != NULL, а в Си значение указателя по умолчанию это мусор, который не NULL

READ ALSO
Помогите разобраться с исключениями C++

Помогите разобраться с исключениями C++

Проблема в том чтобы после выполнения исключения Owerwriting программа продолжила работу и копировала файл,у меня она просто выдает исключение...

195
Не получается создать проект C++ в Visual Studio 2017

Не получается создать проект C++ в Visual Studio 2017

Когда я пытаюсь создать/открыть проект Visual C++, я получаю такое сообщение:

214
удаление элемента односвязного списка

удаление элемента односвязного списка

Помогите понять в чем ошибкаУдаляет все правильно, но при выводе списка в консоли вылетает ошибка

197
закрытие программы при помощи ctrl-c

закрытие программы при помощи ctrl-c

Доброй ночи, форумчанеТакой вопрос: Как в переодичной функции обратного типа(CALLBACK WindProc()) закрывать окно при помощи CTRL+C? Знаю что можно через...

178