我无法找出这个错误的原因。
int binarySearch(int* arr,int l,int r,int x){
int mid = (l+r)/2;
if(arr[mid]==x){
return mid;
}
else if(arr[mid]>x){
binarySearch(arr,mid,r,x);
}
else if(arr[mid]<x){
binarySearch(arr,l,mid,x);
}
else{
return -1;
}
return 0;
}
int search(int* nums, int numsSize, int target){
return binarySearch(nums,0,numsSize-1,target);
}
这是一个简单的二分查找程序.这是错误.
==30==ERROR: AddressSanitizer: stack-overflow on address 0x7ffdbdd5cff8 (pc 0x55745fa9be6c bp 0x7ffdbdd5d010 sp 0x7ffdbdd5d000 T0)
==30==ABORTING
1条答案
按热度按时间bpsygsoo1#
对于初学者来说,似乎是由于输入错误,第一个函数参数的类型不正确。
如果目标元素不等于数组中的元素,则函数不会停止递归调用自身。
另外,如果
arr[mid]
大于x
,那么[mid, r]
范围内的所有值显然也将大于x
。不正确,
使用您的方法,函数定义可以如下所示
注意,搜索到的数组必须排序。