Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    problema caricamento da file binario di un sav

    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);
        }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma p è NULL e tu lo vuoi usare?
    Ultima modifica di oregon; 03-03-2017 a 22:51
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    No il file non è null, lo inizializzo a null al momento della dichiarazione ma il file contiene il salvataggio da caricare in quell'ordine

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Parlavo di p ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    era solo una prova disperata.. anche senza quello da segmentation

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Senza quello? p NON deve essere NULL ma devi allocare lo spazio che ti serve.

    Posta il codice completo, non "prove disperate" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    L'istruzione p = NULL è stata rimossa..comunque p è un array statico che contiene la mano in un array dinamico.. il problema potrebbe essere perchè non inizializzato la mano a null? In ogni caso la parte in questione è questa.. l'errore provviene da qua, senza questa funzione nessun problmea

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' ovvio che il problema è qui, in una delle fread. E potresti capire anche in quale riga esattamente se eseguissi il codice con il debugger passo passo.

    Ma SE NON mostri tutto il codice con le dichiarazioni di p e delle strutture, non si capirà nulla e non si potrà rispondere per risolvere.
    Fai tu.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Come ti ho già scrìtto il debugger mi segnala segmentation fault appena entra nella funzione, come faccio a debuggare linea per linea se da subito segmentation?

    Card *deck=NULL;
    int cardsLeftinthedeck;
    Player hPlayer[NPLAYERS];

    typedef struct {
    char name[DIM_N+1]; //Nome Giocatore
    _Bool alive; //1 Giocatore in vita 0 Giocatore morto
    int nHand; //Numero carte in mano
    Card* hand;
    Type player_type; //Giocatore reale o IA
    }Player;

    typedef struct{
    seme type;
    char phrase[DIM_P+1];
    }Card; //Singola carta con frase e tipologia

    typedef enum {human, IA}Type;

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E io ti ho gi� detto che il debugger lo devi usare eseguendo passo passo per individuare la linea in cui avviene il problema. In questo modo non può andare in seg fault se il problema è nel codice che hai mostrato se non lo esegue.

    Quello che manca da capire � come hai dichiarato il vettore p[] che utilizzi nella fread.


    E' quello il problema.
    Ultima modifica di oregon; 04-03-2017 a 06:56
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.