il parametro "list" di read_file_1, da dove a arriva? come lo allochi? come glielo passi in chiamata?

EDIT: prova così:

codice:
PERSONA* read_file_2 (char* filename, int* dim);
void read_file_1 (char* filename, PERSONA** list, int* dim){
	*list = read_file_2 (filename, dim);
}
;-)