执行后c中的分段故障11

时间:2014-08-07 10:51:10

标签: c data-structures segmentation-fault binary-search-tree

我不明白为什么我这么简单直接地在代码中出现分段错误,请帮忙。我一次又一次检查了代码,但我无法弄明白。 代码的重点是检查我是否可以编写Insert方法而不返回指向节点的指针。

#include<stdio.h>
#include<stdlib.h>


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

struct BST
{
        struct BSTNode *root;
};

struct BST *CreateBST(void);
void Insert(struct BSTNode *root,int data);

int main(void)
{
        struct BST *tree = CreateBST();
        int a[6]= {0,1,2,3,4,5};
        int i;
        for(i=0;i<6;i++)
        {
                Insert(tree->root,a[i]);
        }
        return 0;
}

struct BST *CreateBST(void)
{
        return NULL;
}

void Insert(struct BSTNode *root,int data)
{
        if(root == NULL)
        {
                struct BSTNode *new_node = (struct BSTNode *) malloc (sizeof(struct BSTNode));
                if(!new_node)
                {
                        printf("Memory Error");
                        return;
                }
                new_node->data = data;
                new_node->left = NULL;
                new_node->right= NULL;
                root = new_node;
        }
        else if(data<= root->data)
                Insert(root->left,data);
        else if(data>root->data)
            Insert(root->right,data);
    return;
}

2 个答案:

答案 0 :(得分:3)

您调用返回CreateBST的函数NULL。然后,您尝试通过执行NULL取消引用此tree->root指针。这将导致undefined behavior和您的崩溃。


您的程序还存在其他问题,例如(如果您解决了上述问题),您将tree->root 按值传递给Insert,这意味着Insert函数root是副本,更改副本不会更改原始文件。

答案 1 :(得分:-3)

当程序试图访问不具备其权限的内存区域时,会发生分段错误错误。尝试重新启动,这可能会修复错误。