#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[i]
和arr[j]
来访问数组arr
之外的元素。
首先尝试用i--
替换i++
。