今天在学习数据结构的时候,学到二叉排序树,遇到了段错误。代码如下:
int searchInBT(pinsBT tree,int key,pinsBT parent,pinsBT* result){
if(!tree) {
*result = parent;
return 0;
}
else if(key==tree->data) {
(*result) = tree;
return 1;
}
else if(key>tree->data){
return searchInBT(tree->rchild,key,tree,result);
}
else{
return searchInBT(tree->lchild,key,tree,result);
}
}
在某个函数里面调用了这个函数。
pinsBT* tst = NULL;
if(searchInBT(*tree,key,NULL,tst)){
...
}
结果遇到段错误,经过调试发现在运行到
(*result) = tree;
出错。
原因是,result地址非法,因为在实参声明时,声明pinsBT *tst = NULL,所以在对result赋值的时候,result指向的地址是非法地址,正确的做法应该是
先声明一个pinsBT的变量,再声明一个pinsBT*的变量指向它,即:
pinsBT tmp = NULL;
pinsBT* tst = &tmp;