Что вызвало ошибку сегментации? - PullRequest
0 голосов
/ 28 мая 2020
#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 в качестве значения индекса.

1 Ответ

2 голосов
/ 28 мая 2020

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

c не меньше 1. С i = c, условие i > 0 и (!) Приращение (не уменьшение) i после каждой итерации (i++) l oop становится бесконечным - i всегда будет больше 0.

Ошибка сегментации возникает перед любой другой ошибкой времени выполнения, потому что программа пытается получить доступ к элементам за пределами массива arr, используя arr[i] и arr[j] в определенной точке бесконечного l oop.

Попробуйте сначала заменить i++ на i--.

...