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:
la mia implementazione della freeList è la seguente:codice: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;
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.codice: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); }
sapreste dirmi se c'è qualche problema? grazie.

Rispondi quotando