私はエラトステネスのふるいを実装しましたが、うまくいきました。しかし、MAX 値を 50000 などに増やすと、未処理の win32 例外でアプリケーションがクラッシュします。これは、スタックオーバーフローが原因で発生したと思います。
今私の質問は、どうすればこれを防ぐことができますか?
#define MAX 50000
void Sieb_des_Eratosthenes()
{
char Zahlen[MAX + 1] = {0};
int i, j, x;
for(i = 2; i <= MAX; i++)
{
if(Zahlen[i] == 0)
{
Zahlen[i] = 1;
for(j = i * i; j <= MAX; j += i)
{
Zahlen[j] = -1;
}
}
}
}
私の考えはメモリを割り当てることでしたが、これは機能しません
#define MAX 50000
int Sieb_des_Eratosthenes()
{
int i, j, x;
char *array;
array = malloc((MAX + 1) * sizeof(*array));
if (array==NULL) {
printf("Error allocating memory!\n");
return -1; //return with failure
}
for(i = 2; i <= MAX; i++)
{
if(array[i] == 0)
{
array[i] = 1;
for(j = i * i; j <= MAX; j += i)
{
array[j] = -1;
}
}
}
}