0

私のプログラムの目的は、ユーザー入力によって示される素数を見つけることです。素数が見つかったときに素数を格納するように配列を設定しました。p (テスト対象の整数) が増加し、テストが再開されると、配列内の要素で除算するだけで処理が節約されます。44030番目の素数までうまく機能します。コンパイルにはGCCを使用しています。セグメンテーション違反が発生するのはなぜですか?

 //Prime Finder
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i=4;
int p=7;
int j=1;
int cap;
printf("\nWhich prime number would you like to see? ");
scanf("%i",&cap);
long *array=malloc(cap);
array[0]=1;
array[1]=2;
array[2]=3;
array[3]=5;
while(i<=cap)
{
if (array[j]>=p/2) // if true then p is prime
{
    j=1;
    array[i]=p;
    p++;
    i++;
}
else if (p%array[j]==0) // if true then p is not prime
{
    p++;
    j=1;
}
else // in this case p is still under test
    j++;
}
printf("\nHere it is! %i\n\n",array[cap]);
return 0;
}
4

1 に答える 1

0

cap呼び出しでバイトではなくcap*sizeof(long)バイトを割り当てていますmalloc()。つまり、メモリの他の部分を上書きしているのです。正確な時期は、上限に提供する値によって異なります。

于 2012-10-14T18:06:06.157 に答える