Pourquoi je reçois la faute de segmentation en suivant le programme c

Le code suivant est compilé avec succès, mais l’erreur de segmentation apparaît dans la première ligne de la fonction main . Je ne comprends pas pourquoi je reçois cette erreur.

 #include  #include  unsigned int prime=2; void resetprimegenerator() { prime=2; } unsigned int getnextprime() { while(1) { if(isprime(prime)) return prime; } } int isprime(unsigned int n) { int i=3,check=1; if(n==2) return n; for(i=3;i0) { scanf("%d",&input[i]); getchar(); n=input[i]; j=0; resetprimegenerator(); while(n-->0) { answer[i][j]=getnextprime(); j++; } i++; } for(i=0;i<t;i++) { for(j=0;j<input[i];j++) { if(j==input[i]-1) printf("%u",answer[i][j]); else printf("%u ",answer[i][j]); } } return 0; } 

Je ne comprends pas pourquoi je reçois l’erreur suivante.

 unsigned int answer[500][5000]; 

En supposant que unsigned int soit 4 octets, cette variable occupera environ 10 Mo de la taille de la stack. C’est plus grand que la taille d’une stack normale, vous avez un débordement de stack .

La solution consiste à utiliser l’allocation dynamic ou à la rendre globale / statique. Choisissez selon vos besoins.

Vous manquez d’espace de stack lorsque vous déclarez

 unsigned int answer[500][5000]; 

Au lieu de cela, allouez-le sur le tas; utilisez malloc ().

Par exemple, vous pouvez utiliser un pointeur sur un tableau:

 int ( *array )[5000] = malloc( sizeof( *array ) * 500 ) ; array[0][0] = 1234 ; 

sizeof( *array ) est égal à sizeof(int) * 5000