Segmentazion fault, gioco della vita

di il
3 risposte

Segmentazion fault, gioco della vita

Salve a tutti, premetto che sono un principiante nella programmazione.
provando a creare il programma del gioco della vita in c, durante l'esecuzione, dopo aver correttamente compilato il codice, incorro in un errore di segmentazione. quest'errore potrebbe già trovarsi nelle dichiarazioni delle variabili intere che uso, poichè l'esecuzione del codice delle sole dichiarazioni già ripresenta questo errore di segmentazione, che non riesco proprio ad individuare. Vi sarei molto grato se qualcuno potesse aiutarmi ad individuare questo errore e magari a spiegarmi in cosa ho sbagliato in modo da non ripetere in futuro errori del genere, grazie 1000; ecco il mo codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 100
main()
{
      int life[MAX], N, log=1, log2=1, j, T, a, newlife[N], population[T], somma=0, m, M, last;     
      while(log)
      {
                printf("Inserire un valore intero positivo minore o uguale a 100 : \n");
                scanf("%d", &N);
                if((N>0)&&(N<=100)) log=0;
                else printf("Valore non valido, riprova.\n");
      }
      for(j=0; j<N; j++)
      {
               life[j]=0;
      }
      for(j=0; j<3; j++)
      {
               life[rand()%N]=1;
      }
      while(log2)
      {
                printf("Inserire un valore intero positivo minore o uguale a 1000 : \n");
                scanf("%d", &T);
                if((T>0)&&(T<=1000)) log=0;
                else printf("Valore non valido, riprova.\n");
      }
      for(a=0; a<T; a++)
      {
               for(j=0; j<N; j++)
               {
                        if(j==0)
                        {
                                if((life[1]==1)&&(life[N-1]==1)) newlife[j]=1;
                                if(((life[1]==1)&&(life[N-1]!=1))||((life[1]!=1)&&(life[N-1]==1))) newlife[j]=0;
                                if((life[1]==0)&&(life[N-1]==0)) newlife[j]=life[j];
                        }
                        else if(j==N-1)
                        {
                                if((life[0]==1)&&(life[N-2]==1)) newlife[j]=1;
                                if(((life[0]==1)&&(life[N-2]!=1))||((life[0]!=1)&&(life[N-2]==1))) newlife[j]=0;
                                if((life[0]==0)&&(life[N-2]==0)) newlife[j]=life[j];
                        }
                        else
                        {
                                if((life[j+1]==1)&&(life[j-1]==1)) newlife[j]=1;
                                if(((life[j+1]==1)&&(life[j-1]!=1))||((life[j+1]!=1)&&(life[j-1]==1))) newlife[j]=0;
                                if((life[j+1]==0)&&(life[j-1]==0)) newlife[j]=life[j];
                        }
               }
               somma=0;
               for(j=0; j<N; j++)
               {
                        if(newlife[j]==1) somma++;
               }
               population[a]=somma;
               for(j=0; j<N; j++)
               {
                        printf("%d", newlife[j]);
               }
               printf("\n");
               for(j=0; j<N; j++)
               {
                        life[j]=newlife[j];
                        newlife[j]=0;
               }
      }
      m=population[0];
      M=population[0];
      for(j=1; j<N; j++)
      {
               if(m>population[j]) m=population[j];
               if(M<population[j]) M=population[j];
               if(j==N-1) last=population[j];
      }
      printf("il valore minimo e massimo dell'array population sono rispettivamente : %d e %d; l'ultimo valore dell'array population è %d\n", m, M, last);
      getchar();
      getchar();
}

3 Risposte

  • Re: Segmentazion fault, gioco della vita

    Il problema è forse dovuto al fatto che dichiari gli array newlife[] e population[] di dimensione "casuale" in quanto N e T non sono stati ancora inizializzati!
  • Re: Segmentazion fault, gioco della vita

    Hai ragione, infatti mettendo un numero nella loro dimensione l'errore è stato risolto! Quindi una soluzione potrebbe essere in generale dichiarare oggetti che dipendono da variabili come appunto la dimensione di un vettore dopo che il valore variabile è stato preso da tastiera e memorizzato? grazie 1000 cmq
  • Re: Segmentazion fault, gioco della vita

    Sì ma solo se il tuo compilatore supporta i VLA. Altrimenti (ed è comunque consigliabile) utilizza l'allocazione dinamica della memoria con la malloc
Devi accedere o registrarti per scrivere nel forum
3 risposte