Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 81
#1

Потеря указателя на корень дерева - C++

10.10.2015, 09:51. Просмотров 152. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток. У меня есть функция вставки структуры в АВЛ дерево, но при его печати оказывается, что дерево пусто и корень дерева в том числе.
C++
1
2
3
4
5
6
7
8
9
10
11
TNode *Insert(TNode *root, Pair p)
{
    if (!root) /*{std::cout<<238<<std::endl; return new TNode(p);}*/
    {
        root = new TNode(p);
        return root;
    }
    if (strcmp(root->pair.key,p.key)>0)  root->left=Insert(root->left, p);
    else  if (strcmp(root->pair.key,p.key)>0) root->right=Insert(root->right, p);
    return Balance(root);
}
Возвращаемый указатель вполне рабочий, но в сам root ничего не записалось
C++
1
2
3
4
5
6
7
TNode *node;
std::cin>>tmp.key;
std::cin>>tmp.value;
std::cout<<tmp.key<<std::endl;
node = Insert(root,tmp);
std::cout<<root->height<<std::endl; //если это не закомментировать, то на этом месте программа вылетает
std::cout<<node->pair.value<<std::endl;//выводит правильное значение
Помогите пожалуйста.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2015, 09:51     Потеря указателя на корень дерева
Посмотрите здесь:

C++ Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0]
Создание дерева методом вставки в корень C++
C++ Как открыть корень дерева диска на интересующей папке?
Потеря памяти в программе C++
Потеря памяти C++
Как удалить корень дерева? C++
C++ Деревья С++ (функция, которая получает указатель на корень дерева и возвращает длину самой длинной ветки на дереве)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1709 / 1142 / 270
Регистрация: 05.06.2014
Сообщений: 3,310
10.10.2015, 10:02     Потеря указателя на корень дерева #2
Вас не смущает что в восьмой и девятой строчках идентичные условия?

Добавлено через 5 минут
UPD TNode *node; TNode *node=nullptr;
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 81
10.10.2015, 10:04  [ТС]     Потеря указателя на корень дерева #3
Это да, когда менял местами аргументы функции strcmp не поменял знаки. Но проблему это не решает.
Renji
1709 / 1142 / 270
Регистрация: 05.06.2014
Сообщений: 3,310
10.10.2015, 10:10     Потеря указателя на корень дерева #4
node во втором куске кода не инициализирован и содержит мусор.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
2041 / 1837 / 639
Регистрация: 14.05.2014
Сообщений: 5,366
Записей в блоге: 1
Завершенные тесты: 5
10.10.2015, 10:13     Потеря указателя на корень дерева #5
Цитата Сообщение от Renji Посмотреть сообщение
не инициализирован и содержит мусор.
Цитата Сообщение от mishula Посмотреть сообщение
C++
1
node = Insert(root,tmp);
перед использованием ему присваивется значение
Renji
1709 / 1142 / 270
Регистрация: 05.06.2014
Сообщений: 3,310
10.10.2015, 10:15     Потеря указателя на корень дерева #6
Да, пардон. Тогда смотреть с отладчиком работу кода Balance.
mishula
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 81
10.10.2015, 10:18  [ТС]     Потеря указателя на корень дерева #7
К сожалению, добавление nullptr проблему не решило.

Добавлено через 3 минуты
Тут дело до balance не доходит, так как на добавлении в корень все валится
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2015, 10:20     Потеря указателя на корень дерева
Еще ссылки по теме:

Потеря данных в string C++
C++ Преобразование кода без указателя в код с использованием указателя
C++ В чём отличие константного указателя и указателя на константу?
C++ Потеря значений указателя
C++ Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Renji
1709 / 1142 / 270
Регистрация: 05.06.2014
Сообщений: 3,310
10.10.2015, 10:20     Потеря указателя на корень дерева #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ага, вижу. node = Insert(root,tmp); root = Insert(root,tmp); или Insert(TNode *&root, Pair p)
Yandex
Объявления
10.10.2015, 10:20     Потеря указателя на корень дерева
Ответ Создать тему
Опции темы

Текущее время: 23:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru