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

选择排序打印数组时出现额外值123261769,请求排查原因

问题原因及修复方案

问题1:数组越界访问

你定义的test数组只有4个元素({5,3,2,1}),但selectionSort函数里的所有循环都按5个元素处理(i < 5、j < 5、k < 5)。当循环到索引4时,访问的是数组之外未初始化的内存区域,这里的值是随机的垃圾数据,是你看到的123261769的来源之一。

问题2:函数返回值未定义

selectionSort函数声明为返回int类型,但函数体内没有任何return语句。在C语言中,这种情况下函数会返回一个随机的垃圾值,而你在main函数中把这个返回值赋值给sortTest并打印,这会额外输出一个随机数(如果你的输出里的123261769是这部分,那就是这个原因)。

修复后的代码

#include <stdio.h>

// 改为void类型,无需返回值
void selectionSort(int num[], int length){
    int sml;
    for (int i = 0; i < length; i++){
        for (int j = i+1; j < length; j++)
        {
            if (num[i] > num[j]) 
            {
                sml = num[i];
                num[i] = num[j];
                num[j] = sml;
            }
        }
    }
    for (int k = 0; k < length; k++)
    {
        printf("\n%i", num[k]);   
    }
}

int main(){
    int test[] = {5,3,2,1};
    // 计算数组实际长度,避免硬编码
    int len = sizeof(test)/sizeof(test[0]);
    // 直接调用函数,无需接收返回值
    selectionSort(test, len);
    return 0;
}

修复说明

  • 将selectionSort改为void类型,消除无返回值导致的垃圾值问题。
  • 给排序函数增加length参数,传入数组实际长度,彻底避免越界访问。
  • 在main中通过sizeof计算数组长度,保证循环只处理有效元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:20:42