#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作为索引值。
for ( i = c; i > 0; i++ )
c
至少是 1
. 随着 i = c
状况 i > 0
和(!)的递增(不是递减)。i
在每次迭代后(i++
) 循环无限 - i
将永远大于 0
.
分段故障发生在任何其他运行时错误之前,因为程序试图访问数组以外的元素。arr
借用 arr[i]
和 arr[j]
在无限循环的某一点上。
尝试替换 i++
与 i--
首先是。