繁体   English   中英

二进制搜索树插入会引发分段错误

[英]Binary Search Tree Insertion throws segmentation Fault

有人可以解释下面的二进制搜索插入代码有什么问题吗?当我尝试插入第二个元素时,它会给出分段错误。

node * insert(node * root, int value)
{
    if(root == NULL){
        node *newnode = (node *)malloc(sizeof(node));
        newnode->data = value;
        newnode->left = NULL;
        newnode->right = NULL;
        root = newnode;
    }
    else{
        if(root->data > value)
            insert(root->left, value);

        if(root->data < value)
            insert(root->right, value);
    }
   return root;
}

int main(){
    node* root = NULL;
    root = insert(root, 5);
    root = insert(root, 10);
}

你必须包括stdlib.h

否则,编译器不知道malloc的原型并假设它返回一个int而不是一个指针。 如果您的ABI以不同方式处理指针和整数,则会导致问题。

演员隐藏相应的警告。

正如我所看到的,有两种可能性可能导致崩溃:

  • 正如@undur_gongor所指出的那样,你不是要包含stdlib.h ,而是运行一个不同大小和指针大小的体系结构。 这完全符合您不应该转换malloc结果的原因

  • 你失去了记忆。 由于您没有检查malloc的结果,因此它可能已失败并返回NULL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM