【问题标题】:Segmentation fault, binary search tree in c分段错误,c中的二叉搜索树
【发布时间】:2017-03-14 15:34:45
【问题描述】:

我想使用这个函数向树中插入数据:

struct treeNode{
    data* val;
    struct treeNode *left, *right, *parent;
};


void insert(data *d, struct treeNode **leaf, struct treeNode **leaf_par)
{
    if( *leaf == 0 )
    {
        *leaf = (struct treeNode*) malloc( sizeof( struct treeNode ) );
        (*leaf)->val = d;
        /* initialize the children to null */
        (*leaf)->left = 0;
        (*leaf)->right = 0;
        /* initialize the parent */
        (*leaf)->parent = *leaf_par;  //here I receive segmentation fault
    }
    else if(strcmp(d->name, (*leaf)->val->name) < 0)
    {
        insert( d, &(*leaf)->left, &(*leaf) );
    }
    else if(strcmp(d->name, (*leaf)->val->name) > 0)
    {
        insert( d, &(*leaf)->right, &(*leaf) );
    }
}

我主要有:

struct treeNode *root = NULL;
data d1 = {"Smith"};
insert(&d1, &root, NULL);

存在分段错误:

(*leaf)->parent = *leaf_par;

第一次 *leaf_par 是 NULL,我不知道为什么它没有正确运行。我应该如何修复我的插入功能?没有“父”指针很容易,但我必须用“父”来做到这一点,它不起作用。

【问题讨论】:

  • 显然,您正在为**leaf_par 传递NULL 但尝试*leaf_par 访问,因此是错误的。在这种情况下,您希望父母是什么?您需要检查该情况并进行相应设置。

标签: c insert binary-search-tree


【解决方案1】:

您正在尝试取消对 NULL 的引用;不要那样做。

第一次插入的简单修复是:

insert(&d1, &root, &root);

更深层次的递归插入将修复指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多