struct Tnode {
Tnode *left;
Tnode *right;
int content;
Tnode (int item = 0) {
this->content = item;
left = nullptr;
right = nullptr;
}};
class KrTree {
private:
Tnode* root;
void printHelper (Tnode* root) {
if(!root) {
return;
}
printHelper(root->left);
cout << root->content << " ";
printHelper(root->right);
}
void addHelper (Tnode *root, int item) {
if (root->content < item) {
if (root->right) {
addHelper(root->right, item);
} else {
root->right = new Tnode (item);
}
}else {
if (root->left) {
addHelper(root->left, item);
} else {
root->left = new Tnode (item);
}
}
}
public:
// KrTree (){
// }
void addTreeNode (int item) {
if (root){
this->addHelper(root, item);
} else {
root = new Tnode(item);
}
}
void tnodes_count () {
}
void deleteTreeNode () {
}
void printTree () {
printHelper (this->root);
}
//~KrTree (){}};
在上面,我已经设置了二叉搜索树。请注意,我已经评论了我的c-tor和d-tor。我的问题是上面的代码运行良好,但是当我启用c-tor和d-tor时却给出了分段错误。
这是客户端代码:
KrTree* tree = new KrTree();
tree->printTree();
tree->addTreeNode(7);
tree->addTreeNode(2);
tree->addTreeNode(10);
tree->addTreeNode(1);
tree->addTreeNode(5);
tree->addTreeNode(9);
tree->addTreeNode(20);
tree->printTree();
我知道我在这里错过了一些非常愚蠢的东西。请让我知道乳清启用我的c-tor和d-tor会产生细分错误
如果没有构造函数,则默认情况下将KrTree.root初始化为0值。使用构造函数,这不会发生。然后,addTreeNode尝试使用此值作为参考,并且发生分段错误。Visual Studio中调试模式下的默认值类似于0xcdcdcdcdcdcdcdcd。您可以调试应用程序直到第一个addTreeNode并查看root的实际值。要解决此问题,您应该立即在构造函数中初始化成员变量值。例如:
KrTree () : root(nullptr) {
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句