ciusss89
21-07-2010, 16:43
Salve,
Ragazzi sono abbastanza impiccato con questo programma, poiche lo devo consegnare entro domani alle 10 ed è praticamente terminato tranne un bug che è da questa mattina che non riesco ad risolvere.
Il codice qui presente si trova in una funzione di debug, da inglobare poi nel resto del programma.
Il problema: Non riesco a elimare con la free il primo elemento della lista. Per tutti gli altri non ci sono problemi, ma se provo a eliminare il primo elemento mi restituisce un sgmentations fault.
Ora chiunque sia in grado di darmi una mano lo ringrazio davvero...xke sto scelarndo almeno qnt sto sudando per risolvere qst esame.
void pop(M_player *ptop, F_player *B){
dbPRINT(ptop,B);
M_player *ptmp=ptop,*A=ptop,*ptFREE=ptop;
int tmp;
scanf("%d",&tmp);
/*EVENTALE IF SUL CONTROLLO di eliminare la testa...se negativo procedi con il resto dato che funziona..*/
//ptFREE = ptmp->next;
while (ptFREE->id!=tmp )
{ ptmp = ptFREE;
ptFREE = ptmp->next;
}
ptmp->next = ptFREE->next;
free (ptFREE);
}
La funzione chiama inizialmente una dbprint che stampa il contenuto della lista, al termine il main la richiama per verificarne che sia stato eliminato qll che era da eliminare.
Pensavo di mettere un if iniziale...ma come lo implemento???
Ragazzi sono abbastanza impiccato con questo programma, poiche lo devo consegnare entro domani alle 10 ed è praticamente terminato tranne un bug che è da questa mattina che non riesco ad risolvere.
Il codice qui presente si trova in una funzione di debug, da inglobare poi nel resto del programma.
Il problema: Non riesco a elimare con la free il primo elemento della lista. Per tutti gli altri non ci sono problemi, ma se provo a eliminare il primo elemento mi restituisce un sgmentations fault.
Ora chiunque sia in grado di darmi una mano lo ringrazio davvero...xke sto scelarndo almeno qnt sto sudando per risolvere qst esame.
void pop(M_player *ptop, F_player *B){
dbPRINT(ptop,B);
M_player *ptmp=ptop,*A=ptop,*ptFREE=ptop;
int tmp;
scanf("%d",&tmp);
/*EVENTALE IF SUL CONTROLLO di eliminare la testa...se negativo procedi con il resto dato che funziona..*/
//ptFREE = ptmp->next;
while (ptFREE->id!=tmp )
{ ptmp = ptFREE;
ptFREE = ptmp->next;
}
ptmp->next = ptFREE->next;
free (ptFREE);
}
La funzione chiama inizialmente una dbprint che stampa il contenuto della lista, al termine il main la richiama per verificarne che sia stato eliminato qll che era da eliminare.
Pensavo di mettere un if iniziale...ma come lo implemento???