You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言选择排序程序仅约十分之一概率运行正常该如何排查

核心Bug定位

问题出在getMinPos函数的初始化逻辑:

  • 原代码将存储最小元素下标的变量max错误初始化为数组元素值argv[startPos],而非对应的下标startPos
  • 后续代码直接用这个元素值作为下标访问数组argv[max],当数组元素值远大于数组长度(比如测试用例中的3421)时,会触发数组越界访问,属于C语言未定义行为,直接导致程序运行不稳定、随机崩溃。

异常现象说明

  1. 程序随机返回错误值-1073741819:该值对应Windows系统的内存访问违规错误码0xC0000005,是数组越界访问的典型报错
  2. 开头的printf无输出:默认标准输出stdout为行缓冲,程序崩溃时缓冲区内的内容还没来得及刷新到终端就被系统回收,所以看不到打印内容。

修复方案

只需要修改getMinPos函数的初始化语句即可:

int getMinPos(int *argv, int argc, int startPos)
{
    // 原错误写法:int max = argv[startPos];
    int max = startPos; // 修复为存储下标而非元素值
    for (int i = startPos; i < argc; i++)
    {
        if (argv[i] < argv[max])
        {
            max = i;
        }
    }
    return max;
}

修复后程序即可正常完成选择排序逻辑,稳定输出排序结果。

内容的提问来源于stack exchange,提问作者Luqus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:02