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();
}