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

C++数组最大值查找程序异常:输入5元素返回16而非9求助

问题排查与修复

核心bug:数组越界访问

你的第二个循环条件写错了:

for (int i = 1; i <= n; i++) {

数组下标从0开始,arr的有效下标范围是0到n-1。当i = n时,arr[i]访问的是数组末尾之外的内存区域,这里存储的是随机垃圾值(你看到的16就是这种垃圾数据)。

把循环条件改成i < n即可:

for (int i = 1; i < n; i++) {

额外的非标准写法问题

int arr[n];属于变长数组(VLA),这是C99的特性,C标准并未定义这种写法,虽然部分编译器(如GCC)会作为扩展支持,但为了保证代码的可移植性,建议改用标准C的写法:

  • 方法1:使用std::vector(推荐)
#include<iostream>
#include<vector>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    } 
    int max_value = arr[0];
    for (int i = 1; i < n; i++) {
        if (arr[i] > max_value) {
            max_value = arr[i];
        }
    } 
    cout << max_value;
    return 0;
}
  • 方法2:动态分配数组
int* arr = new int[n];
// 使用完记得释放内存
delete[] arr;

内容的提问来源于stack exchange,提问作者Avry G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:54:57