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

C语言数组查找Tag值移至首位的移位代码错误排查

C语言数组MRU移动逻辑代码问题修正

原代码存在的问题

  • 数组遍历越界:外层循环判断条件为j<=lines,C语言数组下标从0开始,若数组总长度为lines,合法下标范围是0~lines-1,该条件会访问数组边界外的非法内存。
  • 边界场景处理缺失:当匹配到的目标值tag刚好在数组首位(j=0)时,代码会执行MRU[j-1]即访问MRU[-1],触发非法内存访问错误。
  • 移位逻辑顺序错误:原代码将MRU[0] = tag写在内层移位循环内部,每次移位都会覆盖数组首位的值,导致后续移位时把刚写入的tag又往后复制,最终出现数据重复、原前置元素丢失的问题。
  • 冗余无效代码:定义的temp1变量仅做赋值操作,没有参与任何后续逻辑,属于无效代码;匹配到tag后对k的赋值也和内层循环初始化重复,没有实际作用。

修正后代码

修正逻辑遵循:遍历不越界、匹配后先完成所有元素后移、最后再将目标值写入首位,首位命中时直接跳过移位操作。

if (replacement == 1) { 
    // 遍历数组搜索目标tag
    int j, k;
    for(j = 0; j < lines; j++){ // 修正循环边界,移除等号避免越界
        if(MRU[j] == tag){
            printf("Hit!\n");
            hits++;
            h = 1;
            // 命中位置不在首位时才需要移位
            if (j > 0) {
                // 从命中位置倒序遍历,将位置前的所有元素依次后移1位
                for(k = j; k > 0; k--) { 
                    MRU[k] = MRU[k - 1];  
                }
                // 所有移位完成后,再把tag放到数组首位
                MRU[0] = tag;
            }
            break;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:39:27