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

C++求数组最大差值时输出最大最小值错误的原因排查

问题产生原因
  • 循环内重复重置max、min取值:你在遍历数组的for循环内部,每次迭代都会将max和min重新赋值为数组第一个元素ptr[0],这会导致上一轮循环的比较结果被完全覆盖,最终遍历结束后,max和min实际上仅比较了ptr[0]和数组最后一个元素ptr[num-1],和数组其他元素无关,自然无法得到全局的最大、最小值。
  • 初始化逻辑错误:
    1. 初始将max赋值为0,如果输入数组所有元素均为负数,最终得到的max值会是错误的0,而非数组的实际最大值;
    2. 变量min声明时未初始化,如果输入数组长度为1,遍历循环不会执行,输出min时会读取到未定义的垃圾值。
  • 边界情况未处理:未兼容数组长度为1的场景,该场景下数组的最大差值为0,现有逻辑会输出错误结果。
  • 存在内存泄漏风险:动态申请的数组ptr没有使用delete[]释放,程序退出后会残留内存垃圾。
修正后参考代码
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
    int num;
    cin >> num;
    long long *ptr = new long long[num];
    for (int x = 0; x < num; x++)
    {
        cin >> ptr[x];
    }
    // 初始化max、min为第一个元素,避免全负数/未初始化问题
    long long max = ptr[0];
    long long min = ptr[0];
    // 遍历从第二个元素开始
    for (int x = 1; x < num; x++)
    {
        if (max < ptr[x])
            max = ptr[x];
        if (min > ptr[x])
            min = ptr[x];
    }

    cout << "max value " << max << endl;
    cout << "Min value is " << min << endl;
    cout << "max difference: " << max - min << endl;
    // 释放动态申请的内存
    delete[] ptr;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:04