C++求数组最大差值时输出最大最小值错误的原因排查
问题产生原因
- 循环内重复重置max、min取值:你在遍历数组的for循环内部,每次迭代都会将
max和min重新赋值为数组第一个元素ptr[0],这会导致上一轮循环的比较结果被完全覆盖,最终遍历结束后,max和min实际上仅比较了ptr[0]和数组最后一个元素ptr[num-1],和数组其他元素无关,自然无法得到全局的最大、最小值。 - 初始化逻辑错误:
- 初始将
max赋值为0,如果输入数组所有元素均为负数,最终得到的max值会是错误的0,而非数组的实际最大值; - 变量
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
相关产品推荐
相关产品推荐

