Come avevo aggiunto nell'ultimo post, nella riga

lista[i]->word=(char*)malloc(20*sizeof(data));

word non è un puntatore a char ma un vettore di char già allocato. Non ha senso (ed è sbagliato) allocare lo spazio con la malloc.