C语言数组越界访问问题求助:需输出指定索引5但代码异常
你的C语言代码问题分析与修正
代码里的几个关键错误
变量名拼写错误
main函数中调用max时用了feld,但你定义的数组变量名是arr,这会直接导致编译报错,必须改成max(arr, 5)才能正常编译。初始值设置不合理
你把numMax初始化为0,但数组里的元素全是负数,导致数组中所有元素都小于0,循环开始后不会更新numMax和indexMax,只有当越界访问到arr[5]时,如果该内存地址的值大于等于0,才会触发更新把索引5存下来——但这完全是碰运气的未定义行为,结果不可控。循环边界导致数组越界
数组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
相关产品推荐
相关产品推荐

