C++ 实现Bst时的分段错误
我正在实现BST,以获得搜索节点的父节点。我被甩了 我的代码C++ 实现Bst时的分段错误,c++,data-structures,binary-search-tree,dynamic-memory-allocation,C++,Data Structures,Binary Search Tree,Dynamic Memory Allocation,我正在实现BST,以获得搜索节点的父节点。我被甩了 我的代码 /** * Program to create BST and do basic functions on it */ using namespace std; struct BstNode { int data; BstNode* left; BstNode* right; }; BstNode* createNewNode(int data){ BstNode* newNode = new
/**
* Program to create BST and do basic functions on it
*/
using namespace std;
struct BstNode {
int data;
BstNode* left;
BstNode* right;
};
BstNode* createNewNode(int data){
BstNode* newNode = new BstNode();
newNode->data=data;
newNode->left=NULL;
newNode->right=NULL;
return newNode;
}
BstNode* insert(BstNode* root,int data){
if(root == NULL)
{
root=createNewNode(data);
}else if(root->data>=data)
{
root->left=insert(root->left,data);
}else{
root->right=insert(root->right,data);
}
return root;
}
int main()
{
BstNode* root;
root=insert(root,10);
root=insert(root,5);
root=insert(root,25);
root=insert(root,45);
BstNode* addr;
BstNode* parentNode;
addr=root;
parentNode=root;
return 0;
}
我找不到原因。当我删除这两条语句中的一条时:
addr=root;
parentNode=root;
它开始运作良好。请提供帮助。对于初学者来说,函数
createNewNode
看起来简单得多
BstNode* createNewNode(int data){
return new BstNode { data };
}
您忘了初始化指针根
BstNode* root;
一定有
BstNode* root = nullptr;
对于初学者来说,函数
createNewNode
看起来简单得多
BstNode* createNewNode(int data){
return new BstNode { data };
}
您忘了初始化指针根
BstNode* root;
一定有
BstNode* root = nullptr;
BstNode*root
未初始化BstNode*root代码>-->BstNode*root=NULL代码>在初始化变量之前访问变量是未定义的行为。避免未定义的行为;它不会带来任何好处,只会导致流泪、哀号和咬牙切齿。还有可能是鼻魔。@KashishGoyal是的,因为插入的第一件事是if(root==NULL)
。此时,root
未初始化。@KashishGoyal未初始化的指针变量不会自动设置为nullptr
。它有一个不确定的值,正在读取它。对于UB,任何行为都是可以接受的——您不能再对代码的功能或原因进行推理。您必须在访问指针之前初始化它。BstNode*root
未初始化BstNode*root代码>-->BstNode*root=NULL代码>在初始化变量之前访问变量是未定义的行为。避免未定义的行为;它不会带来任何好处,只会导致流泪、哀号和咬牙切齿。还有可能是鼻魔。@KashishGoyal是的,因为插入的第一件事是if(root==NULL)
。此时,root
未初始化。@KashishGoyal未初始化的指针变量不会自动设置为nullptr
。它有一个不确定的值,正在读取它。对于UB,任何行为都是可以接受的——您不能再对代码的功能或原因进行推理。在访问指针之前,必须对其进行初始化。