有人可以解释下面的二进制搜索插入代码有什么问题吗?当我尝试插入第二个元素时会出现分段错误。
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);
}
答案 0 :(得分:1)
您必须加入stdlib.h
。
否则,编译器不知道malloc
的原型并假设它返回int
而不是指针。如果您的ABI以不同方式处理指针和整数,则会导致问题。
演员隐藏相应的警告。
答案 1 :(得分:1)
正如我所看到的,为什么会出现这种情况会有两种可能性:
正如@undur_gongor指出的那样,你不包括stdlib.h
并在一个具有不同大小和指针大小的架构上运行。这完全符合why you shouldn't cast the result of malloc
你内存不足。由于您未检查malloc
的结果,因此可能会失败并返回NULL