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

C语言数组长度为5时元素异常问题求助

数组越界导致的未定义行为问题分析与修复

你的朋友遇到的问题是数组下标越界引发的未定义行为,具体问题点和修复方案如下:

问题根源

  1. 错误缩短数组长度:输入数组长度后执行了length -= 1;,这会把数组的实际定义长度减少1,但后续循环仍然按照减1后的length作为上限,用i <= length来遍历,导致访问了数组的非法下标。
    举个例子:输入长度为5时,length被改成4,定义的X[4]和Y[4]只能容纳下标0-3的元素,但循环中i会走到4,此时X[4]和Y[4]已经超出数组的内存范围。这种越界写操作恰好覆盖了数组第一个元素的内存,就出现了第一个元素和最后一个元素相同的现象。
  2. 循环条件错误:所有数组遍历循环都使用i <= length,而正确的数组遍历应该是i < 数组实际长度(因为数组下标从0开始,到数组长度-1结束)。

修复后的代码

#include <stdio.h>

int main()
{
    int length;

    printf("What is the length of your array?: ");
    scanf("%d", &length);

    // 移除错误的length -= 1; 保持数组长度与输入一致
    int X[length], Y[length];

    printf("What are the elements of your array?: \n");

    for (int i = 0; i < length; i++)
    {
        scanf("%d", &X[i]);
        Y[i] = X[i];
    }

    printf("\n");

    for (int i = 0; i < length; i++)
    {
        printf("%d ", X[i]);
    }

    printf("\n");

    for (int i = length - 1; i >= 0; i--)
    {
        printf("%d ", Y[i]);
    }
}

关键修复点

  • 移除了length -= 1;,让数组实际长度与用户输入的长度一致。
  • 所有循环条件从i <= length改为i < length,确保只访问合法的数组下标。
  • 反向遍历的起始值调整为length - 1,避免越界访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:02:07