【发布时间】:2015-01-19 11:59:45
【问题描述】:
我正在尝试构建一个递归函数,该函数通过与中间值进行比较并根据相对大小进行处理来返回排序数组中的地址。如果该值不在数组中,则应该简单地打印 NULL。现在该函数的第一部分可以工作,但是每当应该发生空值时,我都会遇到分段错误。代码如下:
#include <stdio.h>
int *BinSearchRec(int arr[], int size, int n){
if(n==arr[size/2]){
return &arr[size/2];
}
else if(n>arr[size/2]) {
return(BinSearchRec(arr, size+size/2, n));
}
else if(n<arr[size/2]) {
return(BinSearchRec(arr, size-size/2, n));
}
else{
return NULL;
}
}
main(){
int numb[]={2,7,8,9};
if((int)(BinSearchRec(numb, 4, 22)-numb)>=0) {
printf("Position: %d \n", (int)(BinSearchRec(numb, 4, 22)-numb)+1);
}
else{
printf("NULL \n");
}
}
【问题讨论】:
-
你的函数返回和
int *,你把它当作int。还有NULL == 0=>NULL >= 0。 -
这似乎是错误的,您将
size添加到大于size的size/2并且您最终会伸出您的阵列
标签: c segmentation-fault