段错误问题

来源:互联网 发布:2017年经济数据 编辑:程序博客网 时间:2024/06/16 14:46

今天在学习数据结构的时候,学到二叉排序树,遇到了段错误。代码如下:

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;