PDA

View Full Version : [C]Aiuto per la free di una lista


noiseimpera
29-03-2010, 20:30
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.

lupoxxx87
29-03-2010, 21:52
sinceramente non capisco perchè vai a incasinarti con puntatori a puntatori...

cmq..se quelli nella prima struct sono puntatori a funzione...mi sembra giusta :p