PDA

Visualizza la versione completa : [C] Ciclo funzione inserimento in coda


JErikaM
09-02-2012, 17:25
Ciao a tutti :)
Eccomi ancora qui, tuttavia mi è rimasto un solo problema...risolto questo sarò a posto per un bel pò XD
Allora...io ho una lista ordinata (che funziona correttamente) che tiene conto ordinatamente delle mosse più veloci fatte da entrambi gli utenti (quindi la priorità è data solo dal tempo e nn dai giocatori), in ordine da più veloce a più lenta ovviamente. Devo passare le prime 10 di queste mosse ad una coda...riesco a far passare e stampare a video solo la prima delle più veloci...perchè apparentemente non mi funziona il ciclo che dovrebbe far ripetere l'inserimento per 10 volte...

Queste sono le mie strutture dati!


struct top10_mosse_gioc1_2 //lista ordinata
{
double tempo;
int colonna;
int turno_utente;
struct top10_mosse_gioc1_2 *next;
};
struct top10_mosse_gioc1_2*testa=NULL;

//CODA
struct nodo
{
int turno_utente;
int colonna;
double tempo;
struct nodo *next;
};
struct coda
{
struct nodo *primo;
struct nodo *ultimo;
};

struct coda coda;
coda.primo = NULL;
coda.ultimo = NULL;


Il codice della mia funzione è


void coda_10_mosse(struct coda coda, struct top10_mosse_gioc1_2*testa)
{
struct nodo*nuovo;
struct top10_mosse_gioc1_2 *temp;
temp = testa;
int i;
for(i=0;i<=10;i++)
{
nuovo=(struct nodo*)malloc(sizeof(struct nodo));
nuovo->tempo = temp->tempo;
nuovo->colonna = temp->colonna;
nuovo->turno_utente = temp->turno_utente;
nuovo->next= NULL;

if(coda.primo==NULL)
{
coda.primo=nuovo;
}
else
{
coda.ultimo->next=nuovo;
coda.ultimo=nuovo;
}
temp=temp->next;
}
stampa_coda(coda);
return;
}

come ho già detto, il problema pare essere il for perchè se lo tolgo la funzione esegue correttamente il suo lavoro....ma non capisco dove sia sbagliato questo ciclo!!!

:S help!!
grazie in anticipo!!

oregon
09-02-2012, 17:30
Se scrivi così la for

for(i=0;i<=10;i++)

allora stai trattando 11 mosse, dalla 0 alla 10

JErikaM
09-02-2012, 17:41
ok grazie, ma il problema è che mi crasha il gioco...per cui in questo caso 11 o 10 nn mi cambia troppo ^^

oregon
09-02-2012, 17:44
Un crash è sintomo di un problema con i puntatori.

Dove avviene il crash?

Hai fatto un po' di debugging linea per linea?

JErikaM
09-02-2012, 18:10
if(coda.primo==NULL)
{
coda.primo=nuovo;
}
else
{
coda.ultimo->next=nuovo; ///A QUESTA RIGA SI FERMA IL DEBUG
coda.ultimo=nuovo;
}
temp=temp->next;
}
stampa_coda(coda);
return;
}

oregon
09-02-2012, 19:48
Quindi, molto probabilmente il valore di

coda.ultimo

è NULL o sballato. Controlla se è così e perché.

JErikaM
09-02-2012, 21:35
ci guardero' meglio ma nn dovrebbe essere null perche' nn l ho inizializzato da nessuna parte a null. comunque ricontrollo. grazie

oregon
09-02-2012, 21:35
E quale valore gli hai dato? E dove?

Se non l'hai valorizzato allora il suo valore è casuale e sicuramente non valido.

JErikaM
10-02-2012, 08:51
ho controllato...ho fatto coda.primo e .ultimo uguale a Null nel main

oregon
10-02-2012, 10:15
Ecco ... quindi non potrai certo scrivere

coda.ultimo->next

Loading