Diciamo che ogni volta che vuoi usare una struct Dati devi allocare il campo "chiamante". Però non mi è molto chiaro il motivo per cui, in Archivio, fai

codice:
Dati *elenco[chiamate][giorni];

Sarebbe un puntatore a un array bi-dimensionale? Secondo me volevi solo una matrice, nel qual caso togli l'asterisco.