0

連続する数字のリストのサイズを要求し、そのリストの素数を出力するふるいアルゴリズムを実装しようとしていますが、seg fault: 11 エラーが発生します。

これは私のコードです:

#include <stdio.h>
#include <stdlib.h>

#define LIMIT 1000000 /*size of integers array*/

int main(void){
    char n[LIMIT];

    //Reads the size of integer array
    printf("Size of array:\n");
    if((fgets(n, LIMIT, stdin)) == NULL) {
        fprintf(stderr, "Could not read from stdin\n");
        exit(1);
    }

    unsigned long long int i,j;
    int *primes;
    int z = 1;

    primes = malloc(sizeof(n));

    for (i = 2; i < sizeof(n); i++){
    primes[i] = 1; //setting every number in list to 1
    }

    for (i = 2; i < sizeof(n); i++){
        if (primes[i]){
            for (j = i; (i*j) < sizeof(n); j++){
                primes[i * j] = 0; //remove multiples
            }
        } 
    }

    for (i = 2; i < sizeof(n); i++){
        if (primes[i]){
            printf("%dth prime = %llu\n",z++,i);
        }
    }

    free(primes);

    return 0;
}
4

2 に答える 2

1
char n[LIMIT];

の値が の場合、これはLIMIT非常1000000に大きな配列 (100 万バイト) です。スタック オーバーフローが発生します。そのために動的にメモリを割り当てる必要があります。

char *n = malloc(LIMIT);
于 2014-03-08T05:45:47.950 に答える