PDA

Visualizza la versione completa : [C]Aiuto per la free di una lista


noiseimpera
29-03-2010, 21:20
Devo implementare una funz. void free_List (list_t ** pt) che libera l'area di memoria occupata da una lista.

la struttura dati lista cos definita:


typedef struct {
/** la testa della lista */
elem_t * head;
/** la funzione per confrontare due chiavi */
int (* compare) (void *, void *);
/** la funzione per copiare una chiave */
void * (* copyk) (void *);
/** la funzione per copiare un payload*/
void * (* copyp) (void *);
} list_t;

typedef struct elem {
/** chiave */
void * key;
/** informazione */
void * payload;
/** puntatore elemento successivo */
struct elem * next;
} elem_t;


la mia implementazione della freeList la seguente:


void free_List (list_t ** pt){
if(!(*pt))
errno = EINVAL;
else{
/**Se la lista non vuota libera l'area di memoria occupata da tutti i suoi elementi*/
if ((*pt)->head!=NULL)
liberalista((*pt)->head);

free(*pt);
(*pt)=NULL;}
return;

}

void liberalista (elem_t *e){

elem_t* tmp = e->next;
free(e->key);
free(e->payload);
free(e);
if(tmp!=NULL) liberalista(tmp);
}


non sono sicuro della sua correttezza in quanto un utilizzo della stessa in un programma che lavora su tabelle hash che risolvono collisioni con le liste non va a buon fine.
sapreste dirmi se c' qualche problema? grazie.

Loading