【问题标题】:Binary tree code below is giving segmentation fault. Can anyone explain why?下面的二叉树代码给出了分段错误。谁能解释为什么?
【发布时间】:2015-02-08 09:50:14
【问题描述】:

我正在尝试编写二叉树。首先我检查根是否为空,如果是,我将数据分配给根。但是代码给出了分段错误。错误出现在 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;

}

【问题讨论】:

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


    【解决方案1】:

    您将“root”参数作为值传递,这意味着当您更改它时,您只会更改它的本地副本。这意味着当您将 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多