PDA

View Full Version : [C] PROBLEMA FREE !!!


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???

Tommo
21-07-2010, 18:19
E' che non mi sembra abbia granchè senso come l'hai scritto... intanto perchè c'è un free solo.

la cosa che dovresti fare è, in un ciclo


Node* cur = head;
while( cur )
{
Node* n = cur->next;
free( cur );
cur = n;
}


Così elimini tutti i nodi a partire dal primo!

ciusss89
21-07-2010, 18:41
E' che non mi sembra abbia granchè senso come l'hai scritto... intanto perchè c'è un free solo.

la cosa che dovresti fare è, in un ciclo


Node* cur = head;
while( cur )
{
Node* n = cur->next;
free( cur );
cur = n;
}


Così elimini tutti i nodi a partire dal primo!
E il problema è che non devo elimanre tutti i nodi..ma solo uno ad ogni run del funzione