鱼C论坛

 找回密码
 立即注册
查看: 1151|回复: 4

为什么会数组越界

[复制链接]
发表于 2023-12-18 13:07:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[5] = {1, 2, 3, 4, 5};        for (int i = 0; i <= 5; i++) {  // 这里故意将循环条件写成 i <= 5        printf("%d ", arr[i]);    }        return 0;}
上面的代码定义了一个包含5个元素的整数数组arr,并进行了初始化。然后,我们使用for循环遍历数组并打印出每个元素。但是循环条件中的 `i <= 5` 实际上导致了数组越界,因为数组的最大索引只到4。

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-18 14:41:02 | 显示全部楼层
#include<stdio.h>
int main(int argc,char const*argv[])
{
        int n;
        scanf("%d",&n);
    int a[n];
    int sum;
    for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
    for(int i=0;i<n;i++)
    {
        for(int j=1;j<n;j++)
        {
            if(a[i]==a[j])
            {
                sum++;
            }

        }
    }
    printf("%d",sum);
   
    return 0;
}
整型数组用scanf的时候 需要用到取地址符&
另外数组的输入输出都要用for循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-18 17:19:11 | 显示全部楼层
在scanf("%d",&n);后加一句判断if( n > 101)   return ; else这样就不会数组越界
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-18 18:40:05 | 显示全部楼层
#include<stdio.h>
int main()
{
    int a[101];
    int n;
    scanf("%d",&n);
    int sum=0;
    for(int i=0;i<n;i++)scanf("%d",&a[i]);  //加上取址符
    for(int i=0;i<n;i++)
    {
        for(int j=1;j<n;j++)
        {
            if(a[i]==a[j])
            {
                sum++;
            }

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

}
下次记得加上取址符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 12:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表