C语言实现二分查找时程序死机且不打印元素索引如何解决
问题根因
- 二分查找函数内的
mid局部变量仅做了声明,没有在循环内赋值更新。未初始化的局部变量取值是内存中的随机垃圾值,访问arr[mid]属于非法越界内存访问,触发C语言未定义行为:轻则返回错误结果、程序崩溃,极端情况会访问到系统保护内存区域,导致系统卡顿死机。 - 函数参数中传入的
size全程未使用,属于冗余参数可直接删除。
修复方案
在每次循环的第一步计算mid的取值,推荐使用mid = low + (high - low) / 2的写法,相比(low + high)/2可以避免low和high数值过大时的整数溢出问题。
完整可运行代码
#include <stdio.h> // 已删除冗余的size参数 int binarySearch(int arr[], int element, int low, int high) { int mid; while (low <= high) { // 新增mid计算逻辑 mid = low + (high - low) / 2; if (arr[mid] == element) { return mid; } if (element < arr[mid]) { high = mid - 1; } else { low = mid + 1; } } return -1; } int main() { int arr[] = {1, 5, 10, 16, 24, 30, 50, 100}; int size = sizeof(arr) / sizeof(int); int element = 10; int low = 0; int high = size - 1; int search = binarySearch(arr, element, low, high); printf("The element %d was found at index %d", element, search); return 0; }
运行结果
The element 10 was found at index 2
内容的提问来源于stack exchange,提问作者shaikh_sanan_007
相关产品推荐
相关产品推荐

