Beh ... se cambi le carte in tavola, cambia il codice.
Adesso non fai la malloc all'interno della funzione ma nel main prima di chiamarla.
A questo punto non c'è bisogno di doppio puntatore perché non lo modifichi all'interno della funzione.
Ma la fread resta usata male dato che deve essere solamente
codice:void contatto_read_bin (struct contatto *pc, FILE *f){ fread(pc,sizeof(struct contatto),1, f); }