PDA

Visualizza la versione completa : [C] Creazione liste dinamiche


Andres7X
30-12-2008, 15:42
Devo creare una lista dinamica per gestire il tempo di un turno di un giocatore in un gioco (per comodità vi riporto il topic che ho creato stamattina)


Sono sempre dietro a creare quel maledetto gioco... E adesso devo sapere quanto tempo scorre tra l'inizio e la fine di un turno di un giocatore.

Il tempo di ogni singola mossa lo devo memorizzare in una lista dinamica.
Ho creato il seguente codice, ma non funziona e mi blocca il programma...



...
...

struct tempo {
int valore;
struct tempo *next;
};

...
...
..

void Gioco()
{
...
time_t inizio;
time_t fine;
int dimArray = numGiocatori * MAX_NUM_TENTATIVO;
struct tempo tempoImpiegato[dimArray];
...
...

inizio = time(NULL);
...
...
...
fine = time(NULL);
tempoImpiegato[t].valore = fine - inizio;
for(j = 0; j < dimArray; j++)
{
struct tempo *tempoImpiegato[j] = NULL;
struct tempo *nuovo;
nuovo = (struct tempo*)malloc(sizeof(struct tempo));
nuovo -> valore = fine - inizio;
nuovo -> next = tempoImpiegato[j];
tempoImpiegato[j] = nuovo;
}
printf("\nTempo impiegato per fare la mossa: %d secondi", tempoImpiegato[t].valore);
...
}


Penso sia sbagliata l'allocazione, vero?

oregon
30-12-2008, 19:13
A parte altre considerazioni che per ora si possono tralasciare, ma quanto vale

t

quando la usi come indice [t] ?

Andres7X
30-12-2008, 19:26
E' la variabile di un ciclo for:
for(t = 0; t < MAX_NUM_TENTATIVO; t++)

MAX_NUM_TENTATIVO vale 3.

oregon
30-12-2008, 19:32
Allora ...

1) vedere parte del programma

2) non avere indicazioni migliori di non funziona ... si blocca il programma

non potra' mai consentire di darti indicazioni o spiegazioni.

Andres7X
31-12-2008, 11:24
Il fatto è che il problema riguarda proprio quella parte del programma, cioè il seguente codice:



for(j = 0; j < dimArray; j++)
{
struct tempo *tempoImpiegato[j] = NULL;
struct tempo *nuovo;
nuovo = (struct tempo*)malloc(sizeof(struct tempo));
nuovo -> valore = fine - inizio;
nuovo -> next = tempoImpiegato[j];
tempoImpiegato[j] = nuovo;
}
printf("\nTempo impiegato per fare la mossa: %d secondi", tempoImpiegato[t].valore);


Infatti io dicevo che secondo me è l'allocazione ad essere sbagliata (quella dentro il ciclo for, per intenderci), in quanto se la levo non mi dà più problemi...

oregon
31-12-2008, 16:33
Ma perche' crei

struct tempo *tempoImpiegato[j] = NULL;

all'interno del ciclo for?

Questo array scomparira' dopo il primo ciclo ...

Non si capisce quale ragionamento segui nel fare quello che fai all'interno del for ... :confused:

Loading