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

Почему переприсваивается адрес последнего элемента? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Различные цеха завода выпускают продукцию нескольких наименований http://www.cyberforum.ru/cpp-beginners/thread1310561.html
Различные цеха завода выпускают продукцию нескольких наименований. Сведения о выпущенной продукции включают: • наименование; • количество; • номер цеха. Для заданного цеха выведите количество выпущенных изделий по указанному наименованию в порядке убывания их количества. Проблема с выводам:( #include <iomanip> #include <iostream> #include <conio.h>
C++ Написать программу: работа с си строками, функции strlen, strcpy С помощью данного алгоритма нужно вставить слово в конец и начало строки. С помощью strlen() узнать длину строки и длину слова, после перезаписать строку ---> подвинуть строку на длину слова и вставить туда это слово. Так же нужно использовать указатель. Как это организовать? http://www.cyberforum.ru/cpp-beginners/thread1310560.html
C++ Выполнить циклическую перестановку элементов массива влево или вправо
Сформулировать одномерный массив целых чисел, используя датчик случайных чисел. По запросу выполнить циклическую перестановку элементов массива влево или вправо. Вывести полученный массив слева направо, начиная с k-ого элемента, и в k-1-го. Удалить из массива первый и последний элементы. Вывести полученный массив справа налево от k-го до k + 1-го элемента.
Найти три числа последовательности, сумма которых равняется некоторому числу C++
Помогите пожалуйста написать код задачи(Новичок). Даны целые числа m, a1, .... , a20. Найти три натуральных числа i, j, k, каждое из которых не превосходит двадцати, такие, что Ai+Aj+Ak = m. Если таких чисел нет, то сообщить об этом.
C++ Оператор присваивания по умолчанию http://www.cyberforum.ru/cpp-beginners/thread1310505.html
#include <iostream> using namespace std; class Foo { private: int var; //int var = 17; public: /*Foo& operator=(const Foo& right)
C++ Ребят памогите решать упражнения Вот пример и решение \sum_{i=0}^{n+m} {({i}^{2}+k)}^{2} #include <iostream> using namespace std; int main() { int n, m, k, s,i; подробнее

Показать сообщение отдельно
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 325
25.11.2014, 21:16  [ТС]     Почему переприсваивается адрес последнего элемента?
Цитата Сообщение от Croessmah Посмотреть сообщение
Так же вы берете адрес переменной root, которая будет уничтожена при выходе из блока.
Да, помогло. Спасибо!
Но вот только пока решение проблемы я сделал посредством добавления новой переменной Node root. Меня это не очень радует - лишняя переменная, лишние вопросы. Я раньше хотел обойтись чисто нилом, без привлечения новых переменных, и как видите, у меня дальше используется такое же каличное решение в функции Tree::insert.
C++
1
2
3
4
5
6
7
8
9
10
11
12
    bool insert(Node thisNode, int key)
    {
        if (key < thisNode._key)
        {   // спускаемся влево
            if (thisNode.left != &nil)
                // сын этого узла - не nil: идём глубже
                insert(*thisNode.left, key);
            else
            {   // сын этого узла - nil: создали узел (левый сын) и связали с этим узлом
                Node newNode(key, nil);
                thisNode.left = &newNode;
            }
Node newNode(key, nil) - создаст новый узел в пределах этого метода, не возникнет ли потом с этим проблем?

Добавлено через 6 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Ничего не изменится. Дерево нужно строить в динамической памяти, а не из автоматических переменных.
а, понял, то есть таким методом:
C++
1
Node *a = new Node();
Добавлено через 4 часа 9 минут
Хм, мистика. перешёл на динамические переменные. Стал выделять память под указатель через
C++
1
Node *tmp = new Node();
- программа работает нормально.

Но у меня есть второй конструктор
C++
1
2
3
Node *tmp = new Node(key, child);
//key - int
//child - Node
Так вот, при вызове
C++
1
Node *tmp = new Node(8, nil);
в теле цикла, после выхода из цикла автоматом вызывается деструктор. А при вызове
C++
1
Node *tmp = new Node();
деструктор не вызывается и всё хорошо.

Как жить? планировалось второй деструктор использовать на полную, дабы освободить код от лишних строк.
 
Текущее время: 17:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru