Buon giorno, questo codice ci da un 'errore di segmentation fault
evidentemente il problema è su i puntatori sulla struttura
come possiamo risolvere tale problema?

codice:
#include<stdio.h>

typedef struct {
	char nome[20];
	char numero[20];
} contatto;
char name[20];

int EsisteFile( char nomeFile[] ) {

	FILE *fp;
	fp=fopen("lista.dat","rb");
	if (fp == NULL){
		return 0;
	} else {
		fclose(fp);
		return 1;
	}
}

void Inserimento ( char nomeFile[], char name[20] ){

	FILE *fi, *fe;
	contatto p, pt;
	int fine=0;
	int EsisteFile( char nomeFile[] );
	if (!EsisteFile( nomeFile)){
		fi=fopen("lista.dat","wb");
		fwrite(&pt,sizeof(contatto),1,fi);
		fclose(fi);
	} else {
		fi=fopen("lista.dat","rb");
		fe=fopen("temporaneo.dat","wb");

		while (fread(&p,sizeof(contatto),1,fi)){
			if (strcmp(p.nome,name)<0) {
				fwrite(&p,sizeof(contatto),1,fe);
			} else {
				fwrite(&pt,sizeof(contatto),1,fe);
				break;
		}
	}
	while (!EOF){
		fread(&p,sizeof(contatto),1,fi);
		fwrite(&p,sizeof(contatto),1,fe);
		}
	}
	fclose(fi);
	fclose(fe);
	remove(nomeFile);
	rename("temporaneo.dat", nomeFile);
}

int main () {

	char nomefi[] = "lista.dat";
	char casa[20];

	EsisteFile (nomefi);
	printf("Nome?");
	scanf("%s", casa);
	Inserimento ( nomefi, casa );
}