Здесь мало проблем.Во-первых, вы фактически не выделяете новую память.Строка в методе new_node
Node x;
является локальной переменной, поэтому она будет уничтожена после завершения метода, а затем метод возвращает копию этого объекта в стеке.
Тогда в методе add_node
есть еще одна проблема:
root_node.nodes[0]=&(new_node);
Эта строка не вызывает метод node_node, она фактически принимает адрес функции.Даже если бы он вызывал метод, он бы возвращал копию объекта в стеке, а не указатель на объект в куче, который вам нужен.
Ваш код не показывает определение LЯ собираюсь предположить, что это макроопределение.Ваш метод new_node должен выглядеть следующим образом: добавьте новое зарезервированное слово, здесь новый объект создается в куче:
Node* Node::new_node(int node_number,int depth,int value){
Node *x = new Node;
x->node_number=node_number;
x->depth=depth;
x->value=value;
// x->nodes[L]=(Node*) std::malloc(L*sizeof(Node));
// not needed if L is a macro and needs correcting if L is a variable
return x;
}
Теперь этот метод возвращает указатель на новый объект в куче.
Ваш метод add_node будет выглядеть следующим образом:
void Node::add_node(Node root_node,Node new_node){
root_node.nodes[0]=new_node(/* Need to add params here! */);
}
Однако есть гораздо лучший способ сделать то, что вы хотите здесь.Вы должны написать конструктор для класса Node, как показано ниже:
Node::Node(int node_number,int depth,int value)
{
this->node_number = node_number;
this->depth = depth;
this->value = value;
}
Это устраняет необходимость в методе new_node и означает, что ваш метод add_node будет выглядеть следующим образом:
void Node::add_node(Node root_node,Node new_node){
root_node.nodes[0]=new Node(/* Need to add params here! */);
}
Надеюсь, что этопомогает.