lsmCC 发表于 2023-12-18 13:07:35

为什么会数组越界

#include<stdio.h>
int main()
{
    int a;
    int n;
    scanf("%d",&n);
    int sum=0;
    for(int i=0;i<n;i++)scanf("%d",a);
    for(int i=0;i<n;i++)
    {
      for(int j=1;j<n;j++)
      {
            if(a==a)
            {
                sum++;
            }

      }
    }
    printf("%d",sum);

}

FishC 发表于 2023-12-18 13:07:52

数组越界是指访问数组时超出了数组的索引范围。数组的索引从0开始,到数组长度-1为止。当我们试图访问索引大于等于数组长度的元素时,就会导致数组越界。

在你的代码中,数组越界可能发生在for循环中的遍历过程中。你定义了变量a和n,并通过scanf函数获取了n的值。然后,你使用for循环遍历数组,其中循环变量i从0到n-1,然后执行一些操作。

然而,我们并没有看到你定义数组的语句。如果你没有在代码中提供数组定义的部分,那么这个问题可能就是因为缺少了数组的定义而导致的。

下面是一个示例代码,用于解释数组越界的问题:

#include <stdio.h>

int main() {
    int arr = {1, 2, 3, 4, 5};
   
    for (int i = 0; i <= 5; i++) {// 这里故意将循环条件写成 i <= 5
      printf("%d ", arr);
    }
   
    return 0;
}

上面的代码定义了一个包含5个元素的整数数组arr,并进行了初始化。然后,我们使用for循环遍历数组并打印出每个元素。但是循环条件中的 `i <= 5` 实际上导致了数组越界,因为数组的最大索引只到4。

运行上面的代码会导致输出错误或者程序崩溃。为了解决这个问题,我们需要将循环条件修改为 `i < 5`,以保证循环变量i在合法的索引范围内。

所以,请确保你的数组定义正确,并且在访问数组元素时,确保索引不会越界。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

-kasha 发表于 2023-12-18 14:41:02

#include<stdio.h>
int main(int argc,char const*argv[])
{
        int n;
        scanf("%d",&n);
    int a;
    int sum;
    for(int i=0;i<n;i++)
        {
            scanf("%d",&a);
        }
    for(int i=0;i<n;i++)
    {
      for(int j=1;j<n;j++)
      {
            if(a==a)
            {
                sum++;
            }

      }
    }
    printf("%d",sum);
   
    return 0;
}
整型数组用scanf的时候 需要用到取地址符&
另外数组的输入输出都要用for循环

桃花飞舞 发表于 2023-12-18 17:19:11

在scanf("%d",&n);后加一句判断if( n > 101)   return ; else这样就不会数组越界

Husj0711 发表于 2023-12-18 18:40:05

#include<stdio.h>
int main()
{
    int a;
    int n;
    scanf("%d",&n);
    int sum=0;
    for(int i=0;i<n;i++)scanf("%d",&a);//加上取址符
    for(int i=0;i<n;i++)
    {
      for(int j=1;j<n;j++)
      {
            if(a==a)
            {
                sum++;
            }

      }
    }
    printf("%d",sum);

}
下次记得加上取址符{:10_310:}
页: [1]
查看完整版本: 为什么会数组越界