【问题标题】:How to resolve this segmentation fault?如何解决这个分段错误?
【发布时间】:2021-07-29 17:28:51
【问题描述】:

我正在尝试将逻辑写入程序,但在执行时出现分段错误。有人可以告诉我这个错误的原因吗?

  #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);
        }
    }

【问题讨论】:

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


    【解决方案1】:

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

    因此,

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      相关资源
      最近更新 更多