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

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

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以不同方式处理指针和整数,则会导致问题.

演员隐藏相应的警告.

点赞