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

C++实现数组从大到小排序生成新数组输出异常问题求助

问题排查
  • 核心错误为数组定义时机错误:你在读取size的值之前就用未初始化的size定义了两个数组,此时size是内存中的随机垃圾值,数组长度和你后续输入的长度完全不符,后续读写数组元素属于越界访问,直接导致数据错乱,这也是你测试时只能拿到最后一个最大值、其余都是0的原因。
  • 次要逻辑缺陷:max初始值设为0,如果待排序数组包含负数,排序逻辑会直接失效;同时用0标记已取出的元素也会和数组中合法的0元素冲突。
修复方案

使用标准C++的std::vector作为动态数组容器,避免可变长度数组的兼容性问题,同时调整初始化逻辑适配所有整数场景,修复后的代码如下:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int size, sum = 0, pos, max;
    // 先读取长度再创建对应大小的容器
    cin >> size;
    vector<int> array(size);
    vector<int> array2(size);

    for (int i = 0; i < size; i++)
    {
        cin >> array[i];
        sum += array[i];
    }

    for (int i = 0; i < size; i++)
    {
        // 用int最小值作为初始值,兼容负数场景
        max = -2147483648;
        pos = 0;
        for (int q = 0; q < size; q++)
        {
            if (array[q] > max)
            {
                max = array[q];
                pos = q;
            }
        }
        array2[i] = max;
        // 用int最小值标记已取过的元素,避免和合法的0冲突
        array[pos] = -2147483648;
    }

    for (int i = 0; i < size; i++)
    {
        cout << array2[i] << ", ";
    }

    return 0;
}

用你提供的测试用例运行后,输出为5, 4, 3, 2, 1, ,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:48:03