You need to enable JavaScript to run this app. C语言实现二分查找时程序死机且不打印元素索引如何解决
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 02:15:03