是什么原因导致分段故障?

问题描述 投票:-4回答:1
#include<stdio.h>
#include<math.h>
int main(void)
{
    int n=15,i,j,c=1,arr[n/2],prime=0;
    arr[0]=2;
    for(i=3;i<=n;i+=2)
    {
       int count=0;
       for(j=2;j<(sqrt(i));j++)
       {
           if(i%j==0)
           {
           count=1;
           break;
           }
       }
       if(count==0)
       {
           arr[c]=i;
           c++;
       }
    }  
    for(i=c;i>0;i++)     
    {
        int sum=0;
        int k=arr[i];
        for(j=0;sum<=k;j++)
        {
            sum=sum+arr[j];  **segmentation error in this line**
            if(sum==k)
            {
                prime++;
                break;
            }
     }
     printf("%d",prime);
}

我上面提到的那行导致我的分段错误,是否是数组使用错误?根据这个函数,c的值是6。 arr={2,3,5,7,11,13,15}的内容是7个元素,我使用c=6作为索引值。

c visual-studio debugging segmentation-fault share
1个回答
2
投票

for ( i = c; i > 0; i++ )

c 至少是 1. 随着 i = c状况 i > 0 和(!)的递增(不是递减)。i 在每次迭代后(i++) 循环无限 - i 将永远大于 0.

分段故障发生在任何其他运行时错误之前,因为程序试图访问数组以外的元素。arr 借用 arr[i]arr[j] 在无限循环的某一点上。

尝试替换 i++i-- 首先是。

© www.soinside.com 2019 - 2024. All rights reserved.