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

147
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 файл с функцией

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

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

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

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

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

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

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

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

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

250