【发布时间】:2020-08-17 04:15:38
【问题描述】:
我想在 C++ 中使用指向左孩子和右孩子的每个节点的指针来构建一个简单的二叉树。我手动设置树的根,然后向树添加一个数字,但是通过在 main() 中打印它的值,指针后面的变量的值会改变它的值。
#include <stdlib.h>
#include <iostream>
using namespace std;
struct Node
{
int data = 0;
Node *leftNode = NULL;
Node *rightNode = NULL;
};
void insertNode(Node *node, int newData)
{
cout << "Testing Node: " << node -> data << " | " << &(node -> data) << endl;
//smaller (or equal) or bigger
if (newData > node -> data)
{
if (node -> rightNode == NULL)
{
Node newNode;
newNode.data = newData;
node -> rightNode = &newNode;
}
else
{
insertNode(node->rightNode, newData);
}
}
else
{
if (node -> leftNode == NULL)
{
Node newNode;
newNode.data = newData;
node -> leftNode = &newNode;
cout << "Added Node: " << (node -> leftNode) -> data << " AT " << &(node -> leftNode -> data) << endl;
}
else
{
insertNode(node -> leftNode, newData);
}
}
}
int main()
{
Node firstnode;
firstnode.data = 42;
Node *pointer = &firstnode;
//insert nodes
/*for (int i = 0; i < 10; i++)
{
cout << "Inserting new Element: " << (10 + i) << endl;
int newI = 10 + i;
insertNode(&firstnode, newI);
}*/
cout << "Inserting new Element: " << (10) << endl;
int newI = 10;
insertNode(&firstnode, newI);
cout << "in main " << firstnode.leftNode -> data << " | " << &(firstnode.leftNode -> data) << endl;
cout << "in main2 " << firstnode.leftNode -> data << " | " << &(firstnode.leftNode -> data) << endl;
return 0;
}
输出:
Inserting new Element: 10
Testing Node: 42 | 0x61feec
Added Node: 10 AT 0x61fea8
in main 10 | 0x61fea8
in main2 6422216 | 0x61fea8
你有什么办法解决这个问题吗?
【问题讨论】:
-
不要在现代 C++ 中使用
NULL。使用nullptr。 -
当您在
insertNode中创建newNodes 时,您会在堆栈而不是堆上创建它们。然后它们立即超出范围,并且您刚刚设置的指针现在悬空。
标签: c++ pointers binary-tree