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

C语言数组越界访问问题求助:需输出指定索引5但代码异常

你的C语言代码问题分析与修正

代码里的几个关键错误

  1. 变量名拼写错误
    main函数中调用max时用了feld,但你定义的数组变量名是arr,这会直接导致编译报错,必须改成max(arr, 5)才能正常编译。

  2. 初始值设置不合理
    你把numMax初始化为0,但数组里的元素全是负数,导致数组中所有元素都小于0,循环开始后不会更新numMax和indexMax,只有当越界访问到arr[5]时,如果该内存地址的值大于等于0,才会触发更新把索引5存下来——但这完全是碰运气的未定义行为,结果不可控。

  3. 循环边界导致数组越界
    数组arr[5]的有效下标范围是0到4,你的循环条件i <= n(n传入的是5)会让i遍历到5,这属于数组越界访问,C语言中这种行为是未定义的,程序可能崩溃、输出奇怪结果,或者看似正常但留下严重隐患,绝对不能依赖这种写法。

若要得到预期输出5(需明确风险)

如果教授确实要求输出索引5,那你需要让越界的arr[5]被判定为最大值,但必须先修正拼写错误,同时调整numMax的初始值,让数组内的元素都能被正确比较,直到越界的arr[5]:

#include <stdio.h>
#include <limits.h> // 使用INT_MIN需要包含该头文件

int max(int arr[], int n) {
    // 初始化为最小整数,确保数组里的负数都能被正确比较
    int numMax = INT_MIN;
    int indexMax = 0;

    for (int i = 0; i <= n; i++) {
        if (arr[i] >= numMax) {
            numMax = arr[i];
            indexMax = i;
        }
    }

    return indexMax;
}

int main () {
    int arr[5] = {-88, -91, -45, -90, -13};
    // 修正变量名拼写错误
    printf("The index of the highest number is: %d\n", max(arr, 5));

    return 0; // main函数正常返回值应为0,而非1
}

⚠️ 重要提醒:数组越界访问是C语言中的严重错误,上面的代码只是为了满足题目预期,但实际开发中绝对不能这么写,因为越界访问的内存内容不可控,可能导致程序崩溃、数据损坏等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:35:23