我对以下演示代码中出现的问题感到困惑。我预计下一个将继续指向链中的下一个元素,直到达到结束。 However, I get EXE_BAD_ADDESS
错误。我想我在递归指针赋值中遗漏了一些东西。
template <class T>
struct Node {
Node *left, *right, *parent;
int height;
T value;
// constructor
Node(T val)
: value(val){
height = 0;
left = right = NULL;
}
};
template <class T>
void assignToNext(Node<T> *n, Node<T> *next){
// base case
if (n == NULL)
return;
// else assign to this node and check for next
next = n;
assignToNext(n->left, next);
}
然后是主要的:
Node<int> a(1);
a.left = new Node<int>(2);
a.left->left = new Node<int>(3);
a.left->left->left = new Node<int>(4);
a.left->left->left->left = new Node<int>(5);
Node<int> *last = NULL;
assignToNext(&a, last);
std::cout << last->value << std::endl; // I get EXE_BAD_ADDRESS error
提前致谢, NIKHIL
答案 0 :(得分:3)
void assignToNext(Node<T> *n, Node<T> *next){
- &GT;
void assignToNext(Node<T> *n, Node<T> *&next){
//请注意&amp;
否则原始指针不会更新并保持为NULL。
答案 1 :(得分:2)
assignToNext(&a, last);
此代码无法修改局部变量Node<int> *last
的值。您刚刚将NULL
传递给参数Node<T> *next
。因此last
的值仍为NULL
而且您收到了错误消息。如果要修改指针的值,请使用双指针。
像,
void assignToNext(Node<T> *n, Node<T> **next);
assignToNext(&a, &last);