Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225

    [Linguaggio C] ERRORE in fase di esecuzione

    Ho un programma per gestire dei file binari.
    A tempo di esecuzione mi appare questo messaggio:
    "Il programma ha causato una violazione di accesso (errore di segmentazione)".
    Qualcuno saprebbe dirmi cosa significa?
    GRAZIE!

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Stai usando un puntatore non valido in qualche punto del codice.
    Meglio se lo posti

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Ecco il codice che mi dà errore.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    typedef struct {
            char Cognome[20];
            char Nome[20];
            int Anno;
            int codFacolta;
            } Studente;
            
    typedef struct {
            int codFacolta;
            char nomeFac[20];
            } Facolta;
            
    typedef struct {
            char Cognome[20];
            char Nome[20];
            int Anno;
            char nomeFac[20];
            } Anagrafe;
            
    main()
    {
          FILE* fp;
          FILE* ff;
          FILE* fa;
          Studente s;
          Facolta f;
          Anagrafe a;
          
          if ((fp = fopen("Studenti.dat", "rb"))==NULL) {
                  fprintf(stderr, "\nErrore apertura");
                  exit(1);
                  }
          
          while (fread(&s, sizeof(Studente), 1, fp)>0) {
                int trovato = 0;
                if ((ff = fopen("Facolta.dat", "rb"))==NULL) {
                        fprintf(stderr, "\nErrore apertura");
                        exit(2);
                        }
                
                while (fread(&f, sizeof(Facolta), 1, ff)>0) {
                      
                      if(s.codFacolta == f.codFacolta) {
                                      trovato = 1;
                                      a.Cognome[20] = s.Cognome[20];
                                      a.Nome[20] = s.Nome[20];
                                      a.Anno = s.Anno;
                                      a.nomeFac[20] = f.nomeFac[20];
                      if ((fa = fopen("Anagrafe.dat", "ab"))==NULL) {
                              fprintf(stderr, "\nErrore apertura");
                              exit(3);
                              }
                                      fwrite(&a, sizeof(Anagrafe), 1, fa);
                                      }
                                       fclose(fa);
                
                if(trovato) {
                if ((fa = fopen("Anagrafe.dat", "rb"))==NULL) {
                        fprintf(stderr, "\nErrore apertura");
                        exit(4);}
                if(fread(&a, sizeof(Anagrafe), 1, fa))
                printf("%s   %s    %s   %d\n",a.Cognome, a.Nome, a.nomeFac, a.Anno);
                }
                fclose(fa);
                }
                
                fclose(ff);
          }
          fclose(fp);
          
          getch();
    }
    GRAZIE!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sarebbe utile, per fare prima, sapere quando ti da' l'errore (quali dati inserisci ... in quale fase ....) ... magari in quale linea ...

    Per inciso ... queste linee

    a.Cognome[20] = s.Cognome[20];
    a.Nome[20] = s.Nome[20];
    a.nomeFac[20] = f.nomeFac[20];

    NON copiano le stringhe, come potresti pensare ... Per fare la copia di stringhe devi usare la funzione strcpy per ogni stringa ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    225
    Sono riuscita a risolvere il problema!
    Grazie anche al tuo aiuto!

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.