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

为何本地Dev-C++与在线编译器运行C++排序程序结果不一致?

C++数组排序程序输出不一致问题分析与修复

问题现象

在Dev-C++ 6.30(搭配TDM-GCC 9.2.0编译器)本地编译运行排序代码时,输出非预期结果:
2 4 5 9 23 69
而在Programiz在线编译器运行同一代码,得到预期输出:
2 4 5 9 23 88

核心问题:数组越界访问

代码中的冒泡排序内层循环存在数组越界问题:

for(i=0; i<6; i++)
{
    if ( Arr[i] > Arr[i+1])
    {
        // 交换操作
    }
}

数组Arr的大小为6,合法下标范围是0~5。当i=5时,Arr[i+1]等价于Arr[6],这属于访问数组边界外的内存,触发未定义行为——不同编译环境对越界内存的处理逻辑不同,导致输出结果不一致:本地环境中越界访问的内存值覆盖了原数组中的88,而在线环境未出现此问题。

修复方案

修改内层循环的终止条件,确保i+1不超过数组最大下标5,同时可以优化冒泡排序,每轮循环只遍历到未排序的部分(减少不必要的比较):

#include <iostream>
using namespace std;

int main()
{
    int i, cnt, x;
    int Arr[6] = {2, 9, 23, 88, 5, 4};
    
    // 优化后的冒泡排序:每轮减少末尾已排序的元素数量
    for (cnt = 1; cnt < 6; cnt++)
    {
        // i的范围改为0到5-cnt,避免越界且跳过已排序的末尾元素
        for(i=0; i < 6 - cnt; i++)
        {
            if ( Arr[i] > Arr[i+1])
            {
                x = Arr[i];
                Arr[i] = Arr[i+1];
                Arr[i+1] = x;           
            }
        }
    }
    
    // 打印排序后的数组
    for (int j=0; j<6; j++)
        cout << Arr[j] << "\t"; 
}

修复后验证

修改后无论在本地Dev-C++还是在线编译器运行,都会得到预期输出:
2 4 5 9 23 88

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:15:31