Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 实现Bst时的分段错误_C++_Data Structures_Binary Search Tree_Dynamic Memory Allocation - Fatal编程技术网

C++ 实现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

我正在实现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 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,任何行为都是可以接受的——您不能再对代码的功能或原因进行推理。在访问指针之前,必须对其进行初始化。