所以我对C ++比较陌生,所以指针是我仍然习惯的概念。我有一个名为Node的类,有两个名为left
和right
的Node *。在递归方法中,我将引用传递给Node的left
字段:
Node left (num); node->left = &left;
但是,当我返回遍历此节点时,num
中有一个巨大的数字,我的程序崩溃了。我也尝试了这种方法node->left = new Node(num);
,它完全没问题。每种方法之间有什么区别,为什么一种方法有效,而另一种方法无效?
答案 0 :(得分:1)
当您声明Node left (num)
时,left
的空间将在本地堆栈上分配。从方法返回时,内存被删除(left
超出范围)。第二种方法为堆中的(匿名)节点分配空间。这不受方法调用和返回的影响。您还可以将第一个版本修改为:Node *left = new Node(num);
。