Почему после некоторой операции одна из веток узла ссылается на саму себя?

86
18 декабря 2021, 06:40

Cтруктура node имеет в своих полях указатели на node

struct node {
    node() {};
    frequency data;
    node *left;
    node *right;
};

В программе после того, как я добавляю один экземпляр переменной типа node, ее правый узел ссылается сам на себя (хранит те же данные, что и сама переменная)

while (nodes.size() > 2) { // формирование дерева
        node *n1 = new node; // извлекаемые узлы
        node *n2 = new node;
        n1 = &nodes[nodes.size() - 1];
        n2 = &nodes[nodes.size() - 2];
        nodes.pop_back();
        nodes.pop_back();
        node n; // новый узел, соединяющий два извлеченных узла с их суммарной частотой
        n.data.c.second = n1->data.c.second + n2->data.c.second;
        n.left = n1;
        n.right = n2;
        nodes.push_back (n); // после этой операции n.right копирует n
        int i = nodes.size() - 1;
        while (i > 1 && nodes[i].data.c.second > nodes[i - 1].data.c.second)
            swap (nodes[i], nodes[i - 1]);
    }

Почему так происходит?

Answer 1

Похоже, что вы используете n1, n2, которые только что удалили через pop_back()

READ ALSO
Как подключить .obj файл в QtCreator

Как подключить .obj файл в QtCreator

У меня есть скомпилированный из ассемблераobj файл с функцией

168
Проблема с потоками c++

Проблема с потоками c++

впервые работаю с потоками и возникла проблема в синхронизации

84
Выход из бесконечного цикла без команды ввода

Выход из бесконечного цикла без команды ввода

Реально ли сделать выход из цикла без команды ввода? Допустим идет бесконечный цикл и в любой момент я нажимаю ENTER и цикл прекращаетсяЕсли...

103
Как вывести значения цикла после окончания

Как вывести значения цикла после окончания

Ребят, не подскажете, как сделать вывод из цикла итогового значения i,k,j? Пробовал через присваивания другим переменным, но они остаются локальными...

185