bhà...il codice potrebbe sembrare corretto, anche se, io onestamente non sono daccordo su alcune cose:
1) la variabile plista è di tipo char**, quindi andrebbe allocata 2 volte, e non sono sicuro se si possa fare:
codice:
plista[n_nomi-1]=(char*)malloc(n_caratteri);
cioè prima di scrivere plista[n_nomi-1], devi allorare plista, perchè non sai mica a priori di quanto è!
poi d'altro canto sarebbe più corretto scrivere:
codice:
plista[n_nomi-1]=(char*)malloc(n_caratteri*sizeof(char));
perchè bisogna sempre specificare il tipo, il questo caso si tratta di char, e quindi non influenza, poichè sizeof(char)=1...quindi...si ha che è uguale a n_caratteri! lo stesso vale nella printf successiva! andrebbe stampato sizeof(char)*n_caratteri!
spero di essere stato chiaro, comunque se hai dubbi chiedi che ne parliamo...