PDA

View Full Version : [C] Problemi funzioni in lista generica


lefantome
18-03-2010, 10:48
ho un problema nella prima parte. la funzione addElement ha come argomento la lista e ritorna un int.


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;


int add_ListElement(list_t * t,void * key, void* payload){

elem_t* p;
elem_t* new;
/* Crea il nuovo elemento*/
new = (elem_t*)malloc(sizeof( elem_t));
if (new == NULL){ return -1;} /* ritorna -1 se malloc fallisce*/
/*new->key = t->copyk(key);
new->payload = t->copyp(payload);*/



/* Scorre la lista per vedere se l'elemento è già presente*/
/*for (p = t->head; p !=NULL; p = p->next){

if (t->compare(p->key,key)==0){ return -1;}
}*/

new->next = t->head;
t->head = new;

return 0;
}

In pratica mi da segfault sia quando chiamo le funzioni dentro la struct.(copyk,copyp e compare)

Cioè sembra che mi possa usare solo una volta una delle funzioni puntate dentro la struct. Se provo a eseguirne una di esse un'altra volta da segfault WTF
:muro:

bobbytre
18-03-2010, 12:26
ho un problema nella prima parte. la funzione addElement ha come argomento la lista e ritorna un int.


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;


int add_ListElement(list_t * t,void * key, void* payload){

elem_t* p;
elem_t* new;
/* Crea il nuovo elemento*/
new = (elem_t*)malloc(sizeof( elem_t));
if (new == NULL){ return -1;} /* ritorna -1 se malloc fallisce*/
/*new->key = t->copyk(key);
new->payload = t->copyp(payload);*/



/* Scorre la lista per vedere se l'elemento è già presente*/
/*for (p = t->head; p !=NULL; p = p->next){

if (t->compare(p->key,key)==0){ return -1;}
}*/

new->next = t->head;
t->head = new;

return 0;
}

In pratica mi da segfault sia quando chiamo le funzioni dentro la struct.(copyk,copyp e compare)

Cioè sembra che mi possa usare solo una volta una delle funzioni puntate dentro la struct. Se provo a eseguirne una di esse un'altra volta da segfault WTF
:muro:

ma tu per ogni nodo creato hai assegnato ai puntatori la funzione che intendi usare ? e sopratutto ti conviene fare una cosa del genere ?

lefantome
18-03-2010, 12:34
ma tu per ogni nodo creato hai assegnato ai puntatori la funzione che intendi usare ? e sopratutto ti conviene fare una cosa del genere ?

no t è la lista non il nodo.

cmq problema risolto è che nel main passavo un valore NULL che creava casini.

bobbytre
18-03-2010, 12:39
no t è la lista non il nodo.

cmq problema risolto è che nel main passavo un valore NULL che creava casini.

a ok nn avevo letto bene la struct