Ошибка записи данных в дерево (С++)

210
24 июля 2017, 15:18

Добрый день!

При записи данных происходит ошибка. Получается, что не создается узел дерева. Но понять где именно ошибка не могу, и как её исправить, главное. Дерево состоит из рекурсий класса. Создавать отдельно Node проблемно, т.к. в программе другие функции сложно адаптировать. Укажите, пожалуйста, в каком месте ошибка и как её исправить.

Задание: из строки выделяются данные и записываются в узлы дерева в соответствующем формате.

Вот код:

class Tree
    {
    public:
        int data;
        Tree *son;
        Tree *brother;
        Tree();
        ~Tree();
        void des(Tree *tree, std::string S);
    };
    Tree::Tree()
    { 
        Tree::data = NULL;
        Tree::son = NULL; 
        Tree::brother = NULL; 
    }
    Tree::~Tree()
    {
        if (son) delete son;
        if (brother) delete brother;
    }
    void Tree::des(Tree *tree, std::string S)
    {
    int dataInt;
string son;
string brother;
//В данной части кода происходит обработка строки S, с вычленением из неё dataInt, строк S и строк brother. В них ошибки нет. Данные правильно преобразуются в переменную int и выводятся на печать. 
        tree->data = dataInt; //Ошибка возникает тут. Пишет что дерево nullptr.  
        std::cout << data << std::endl;
        des(tree->son, son);
        des(tree->brother, brother);
    }
    int main()
    {
        Tree *tree = new Tree(); 
        std::string S = "(1,65,10)";
        tree->des(tree, S);
        tree->print_Tree(tree);
        system("pause");
        delete tree;
        return 0;
    }
Answer 1

Ну так ошибка очевидна. Вызов tree->des(tree, S); из main сразу приводит к вызовам

des(tree->son, son);
des(tree->brother, brother);

в то время как tree->son и tree->brother равны null-указателям. В результате все падает из-за того, что параметр tree в этих вызовах будет null-указателем. Все как вы и описали. В чем затруднение-то?

P.S. Однако непонятно, зачем вы вообще сделали des методом класса Tree если к переменным объекта Tree через this вы в этом методе вообще нигде не обращаетесь, а везде работаете через параметр tree.

READ ALSO
Как использовать динамическую память в c++?

Как использовать динамическую память в c++?

Как работает динамическая память и какими операторами пользоваться для работы с ней в C++?

617
map.insert - что я делаю не так?

map.insert - что я делаю не так?

Что я делаю не так? Нужно просто написать функцию, которая значения из map переводит в set

294
Не подгружается контент [требует правки]

Не подгружается контент [требует правки]

Здравствуйте, подскажите пожалуйста почему у меня на сайте в адресной строке подгружается ссылка на объявление а само объявление не грузиться...

203
Почему не работает данный скрипт? [требует правки]

Почему не работает данный скрипт? [требует правки]

Почему не работает данный скрипт? (должен по нажатию на кнопку с классом menu-btn выводить меню) на codepen проверил, все работает

174