Mic*_*ick 6 c++ pointers b-tree
我的C++指针存在问题,如果有人能够与我分享他们的专业知识,那就太棒了!
我得到的输出是:
1:
2:
END: C
1:C
2:E
END: E
Run Code Online (Sandbox Code Playgroud)
我期待的输出是:
1:
2:
END: C
1:C
2:C
END: E
Run Code Online (Sandbox Code Playgroud)
相关代码是这样的:
我的test.cpp
tree.insert('C');
tree.insert('E');
Run Code Online (Sandbox Code Playgroud)
插入功能:
template <typename T> pair<typename btree<T>::iterator, bool> btree<T>::insert(const T& elem) {
cout << "1:" << this->rbegin_->value() << endl;
btree_node<T> node(elem);
cout << "2:" << this->rbegin_->value() << endl;
rbegin_ = &node;
iterator itr;
pair<typename btree<T>::iterator, bool> p(itr, false);
cout << "END: " << this->rbegin_->value() << endl;
return p;
}
Run Code Online (Sandbox Code Playgroud)
btree_node的构造函数(基本上是空的):
template <typename T> btree_node<T>::btree_node(const T& elem) : value_(elem), nextCont_(NULL), prevCont_(NULL), nextNode_(NULL), prevNode_(NULL) {}
Run Code Online (Sandbox Code Playgroud)
btree类有一个私有变量:
btree_node<T>* rbegin_;
Run Code Online (Sandbox Code Playgroud)
这就是我正在修改的内容.rbegin_最初设置为btree构造函数中的空节点,其中:
btree_node<T> end(NULL);
rbegin_ = &end;
Run Code Online (Sandbox Code Playgroud)
似乎我的节点构造函数,它什么都不做,正在修改rbegin-> value()的值....
任何帮助赞赏.
你得到运气:
1:
2:
END: C
1:C <--- Undefined.
2:E
END: E
Run Code Online (Sandbox Code Playgroud)
错误在于:
template <typename T> pair<typename btree<T>::iterator, bool> btree<T>::insert(const T& elem) {
cout << "1:" << this->rbegin_->value() << endl;
btree_node<T> node(elem); /* LOCAL parameter, will be deleted when leaving scope*/
cout << "2:" << this->rbegin_->value() << endl;
rbegin_ = &node; /* Pointing to a LOCAL parameter, when leaving the scope it will point to undefined memory. */
iterator itr;
pair<typename btree<T>::iterator, bool> p(itr, false);
cout << "END: " << this->rbegin_->value() << endl;
return p;
}
Run Code Online (Sandbox Code Playgroud)
所以:
A.动态分配"node"的内存(malloc左右).
B.我不知道你想要做什么,但是你用每个插入物替换树头上的新值并忽略旧头(免费?)......我不认为你想要的做.
归档时间: |
|
查看次数: |
150 次 |
最近记录: |