Non riesco a caricare da un file binario.. il programma entra in segmentation fault subito appena la funzione viene chiamata senza permettermi di capire dove sta l'errore.. qualcuno puo aiutarmi?


int i, j;
p = NULL;
FILE* fp=NULL;
fp = fopen("salvataggio.sav", "r+b");
if(fp == NULL)
exit(-1);
codice:
    for(i=0;i<NPLAYERS; i++){
        fread(&p[i].name, sizeof(char), DIM_N+1, fp);
        fread(&p[i].alive, sizeof(_Bool), 1, fp);
        if(p[i].alive == 1){
            fread(&p[i].nHand, sizeof(int), 1, fp);
            fread(&p[i].player_type, sizeof(Type), 1, fp);
            p[i].hand=(Card*)malloc(p[i].nHand * sizeof(Card));
            for(j=0; j<p[i].nHand; j++){
                fread(&p[i].hand[j].phrase, sizeof(char), DIM_P, fp);
                fread(&p[i].hand[j].type, sizeof(seme), 1, fp);
            }
        }
    }
 Caricamento mazzo
    fread(&cardsleft, sizeof(int), 1, fp);
    deck=(Card*)malloc(cardsleft * sizeof(Card));
    for(i=0; i<cardsleft; i++){
        fread(&deck[i].phrase, sizeof(char), DIM_P, fp);
        fread(&deck[i].type, sizeof(seme), 1, fp);
    }