【发布时间】:2014-03-01 11:12:11
【问题描述】:
stackoverflow 和 C/C++ 的新手。我正在通过实现二叉树并有一个简单的问题。假设我有以下内容:
struct Node {
int data;
Node* right_child;
Node* left_child;
};
void addNode(Node* tree, int new_data){
if(tree == NULL){
Node* new_tree = new Node;
new_tree->data = new_data;
new_tree->right_child = NULL;
new_tree->left_child = NULL;
tree = new_tree;
}
}
int main(){
Node* tree = new Node;
tree = NULL;
addNode(tree, 3);
cout << tree->data << endl; //CRASH
}
很简单吧。它会崩溃,因为树仍然是 NULL,即使在从 addNode 返回之后。我试图理解的是为什么一旦调用 addNode 就不会更新它。当然,使用并更新了指针的副本,但它不应该仍然保持相同的地址吗?因此,仍然更新原始内存地址并返回。或者新指针是否出于某种原因指向不同的位置?我对正在发生的事情感到困惑。任何帮助都会很棒。
另外,我只是在网站上编写了该代码 - 抱歉,如果有小错误,并没有实际运行它。
谢谢。
【问题讨论】:
-
为什么
tree在初始化后就设置为NULL?