如何解决这个分段错误?

时间:2021-05-07 11:44:15

标签: arrays c segmentation-fault indexoutofboundsexception circular-list

我正在尝试为程序编写逻辑,在实现时我遇到了分段错误。有人能告诉我这个错误的原因吗。

  #include<stdio.h>
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n,m,s;
            scanf("%d %d %d",&n,&m,&s);
            int a[n],i,j=s;
            for(i=1;i<=n;i++)
            a[i]=0;
            int ind=0;
            while(m>0)
            {
                a[j]=a[j]+1;
                ind=j;
                if ((j+1)%n==0)
                j=1;
                else
                j=(j+1)%n;
                m=m-1;
            }
            printf("%d\n",ind);
        }
    }

1 个答案:

答案 0 :(得分:1)

在 C 中的数组声明中指定的数字是元素的数量,而不是最大索引。 C 中的数组索引从零开始。

因此,

            int a[n],i,j=s;
            for(i=1;i<=n;i++)
            a[i]=0;

很糟糕,因为它向超出范围的 a[n] 写入了一些内容。

如果您想使用来自 a[1] 而不是 a[0] 的元素,请再分配一个元素以避免超出范围的访问。

相关问题