Ciao a tutti
C'è qualcosa che non mi quadra nell'assegnamento delle funzioni ad altre funzioni.
codice:
typedef struct elem {
  void *key; /** chiave */
  struct elem *next; /** informazione */
} node;
 
typedef struct {
  node *head; /** la testa della lista */
  int (*compare) (void *, void *); /** la funzione per confrontare due chiavi */
  void *(*copyk) (void *); /** la funzione per copiare una chiave */
} list;

int compare_int(void *a, void *b) {
    int *ai, *bi;
    ai = (int *) a;
    bi = (int *) b;
    return ((*ai) - (*bi));
}

void* copy_int(void *a) {
  int *ai;
  if ( ( ai = malloc(sizeof(int) ) ) == NULL ) return NULL;
  *ai = *(int *) a;
  return (void *) ai;
}

list new_int_list(void){
	list nwl;
	nwl.head = NULL;
	nwl.compare = compare_int;
	nwl.copyk = copy_int;
}

int main(){
	list nwl; int a=1,b=2,c=3; int *x; 
	nwl = new_int_list();
	printf("Risultato : %d \n",nwl.compare(&a,&b));
	x = (int *) copy_int(&a);
	printf("Risultato : %d \n",*x);
	x = (int *) nwl.copyk(&a);
	printf("Risultato : %d \n",*x);
	return 0;
}
La prima x riesce a stamparmela.
Alla seconda mi da errore di segmentazione.

Ma questo è molto strano, visto che ho assegnato a copyk = copy_int???

Aiutatemi, non ci capisco più nulla!