下面的二叉树代码给出了分段错误。有谁能解释为什么?

时间:2015-02-08 09:50:14

标签: c++ tree segmentation-fault binary-tree

我正在尝试编写二叉树代码。首先我检查root是否为空,如果是,我将数据分配给root。但是代码给出了分段错误。错误发生在cout语句中,这表明问题在于内存分配。

我无法弄清楚什么是错的。任何人都可以解释并建议我如何纠正下面的代码?

#include<iostream>

using namespace std;


struct TreeNode { 
    int data; 
    struct TreeNode* left; 
    struct TreeNode* right; 
}; 

void insert(TreeNode *root, int data){

    TreeNode *newNode = new TreeNode;
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;

    if(root==NULL){
        root = newNode;
        return;
    }

}

int main(){

    TreeNode *root=NULL;

    insert(root,10);

    cout << root->data << endl;

}

1 个答案:

答案 0 :(得分:0)

你正在传递&#34; root&#34;参数作为值,意味着当您更改它时,您只需更改它的本地副本。这意味着当您将root设置为有效值时,它不会更改main中的root。由于root的值为NULL,因此会出现分段错误。

您可以通过返回插入的节点或使用引用来修复它。 参考文献:

void insert(TreeNode*& root, int data){
    TreeNode *newNode = new TreeNode;
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;

    if(root==NULL){
        root = newNode;
        return;
    }
}