これは私が素数を生成するために球オンライン裁判官で提出したコードですが、私はセグメンテーションフォルトを取得しています。目的は、与えられた範囲mからn(n> m)の間のgenerate prime numbersです。これは、Sieve of Eratosthenesアルゴリズムを使用して実装されます。どこが間違っているのか教えてください。感謝:)私のコードにセグメンテーションフォルトがあります
#include <stdio.h>
#include <math.h>
int main(){
long int m,n,c1,c2,c3;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&m,&n);
//create prime list
short int *prime;
prime = (short int*)malloc((n-m)*sizeof(short int));
//fill list with 0 - prime
for(c1 = 2; c1 <= n; c1++){
prime[c1] = 1;
}
//set 1 and 0 as not prime
prime[0]=0;
prime[1]=0;
//find primes then eliminate their multiples (0 = prime, 1 = composite)
for(c2 = 2;c2 <= (int)sqrt(n)+1;c2++){
if(prime[c2]){
c1=c2;
for(c3 = 2*c1;c3 <= n; c3 = c3+c1){
prime[c3] = 0;
}
}
}
//print primes
for(c1 = m; c1 <=n; c1++){
if(prime[c1]) printf("%d\n",c1);
}
}
return 0;
}
セグメント違反はどこにありますか? –
segfaultの場所についての情報はありますか?巨大なコードブロックで単一のバグを発見するのは本当に難しいことです。 – templatetypedef
GDBを使用してsegfaultが表示される場所を決定します – shybovycha