Ciao,
non mi piace:
codice:
al = malloc(sizeof(Dati));
stai allocando spazio pari al puntatore "Dati" e non alla "struct dati".
prova con:
codice:
al = malloc(sizeof(struct dati));