junkieman
21-07-2012, 19:37
Primo thread, ragazzi, spero possiate darmi una mano... :)
Ho da poco iniziato a programmare facendomi le ossa sul C, e mi sono
bloccato nel cercare di realizzare il programma che segue, la cui traccia è
all'incirca questa:
---> Verificata l'esistenza di un file binario contenente le informazioni
relative a un singolo esame su una classe di studenti (nome, cognome,
matricola, voto): si scriva un codice contenente una funzione che
carichi in memoria heap i dati dell'intera classe, e si crei poi la lista ordinata
in ordine crescente di voto per i soli studenti che hanno superato (18/30)
l'esame.
Ho già realizzato il codice per creare il suddetto file binario e fila liscio,
ho poi cercato di svolgere la traccia e, in compilazione, non ci sono
errori o warning...ma il programma va in crash in esecuzione.
Dove sbaglio?
Il codice della funzione principale, a cui viene passato
il file già aperto, è:
void carica(FILE *fb)
{
struct stud *info;
struct nodo *nuovo, *corr, *prec;
struct nodo *inizio = NULL;
unsigned int tot;
int n, i;
fseek(fb, 0, SEEK_END);
tot = ftell(fb);
n = (int) tot / sizeof(struct stud);
rewind(fb);
info = malloc(sizeof(struct stud)*n);
for(i=0; i<n; i++)
{
fread(info, sizeof(struct stud), 1, fb);
if((info->voto) >= 18)
{
nuovo = (struct nodo*)malloc(sizeof(struct nodo));
if(nuovo != NULL)
{
strcpy(nuovo->nome, info->nome);
strcpy(nuovo->cognome, info->cognome);
strcpy(nuovo->matricola, info->matricola);
nuovo->voto = info->voto;
nuovo->pros = NULL;
prec=NULL;
corr=inizio;
while( ( corr != NULL) && ( nuovo->voto >= corr->voto ) )
{
prec = corr;
corr = corr->pros;
}
if(prec == NULL)
{
nuovo->pros = inizio;
inizio = nuovo;
}
else
{
prec->pros = nuovo;
nuovo->pros = corr;
}
}
else
{
printf("\n\nMemoria esaurita!\n");
break;
}
free(nuovo);
}
free(info);
}
}
Grazie in anticipo a chiunque volesse rispondermi...buon weekend! :cool:
Ho da poco iniziato a programmare facendomi le ossa sul C, e mi sono
bloccato nel cercare di realizzare il programma che segue, la cui traccia è
all'incirca questa:
---> Verificata l'esistenza di un file binario contenente le informazioni
relative a un singolo esame su una classe di studenti (nome, cognome,
matricola, voto): si scriva un codice contenente una funzione che
carichi in memoria heap i dati dell'intera classe, e si crei poi la lista ordinata
in ordine crescente di voto per i soli studenti che hanno superato (18/30)
l'esame.
Ho già realizzato il codice per creare il suddetto file binario e fila liscio,
ho poi cercato di svolgere la traccia e, in compilazione, non ci sono
errori o warning...ma il programma va in crash in esecuzione.
Dove sbaglio?
Il codice della funzione principale, a cui viene passato
il file già aperto, è:
void carica(FILE *fb)
{
struct stud *info;
struct nodo *nuovo, *corr, *prec;
struct nodo *inizio = NULL;
unsigned int tot;
int n, i;
fseek(fb, 0, SEEK_END);
tot = ftell(fb);
n = (int) tot / sizeof(struct stud);
rewind(fb);
info = malloc(sizeof(struct stud)*n);
for(i=0; i<n; i++)
{
fread(info, sizeof(struct stud), 1, fb);
if((info->voto) >= 18)
{
nuovo = (struct nodo*)malloc(sizeof(struct nodo));
if(nuovo != NULL)
{
strcpy(nuovo->nome, info->nome);
strcpy(nuovo->cognome, info->cognome);
strcpy(nuovo->matricola, info->matricola);
nuovo->voto = info->voto;
nuovo->pros = NULL;
prec=NULL;
corr=inizio;
while( ( corr != NULL) && ( nuovo->voto >= corr->voto ) )
{
prec = corr;
corr = corr->pros;
}
if(prec == NULL)
{
nuovo->pros = inizio;
inizio = nuovo;
}
else
{
prec->pros = nuovo;
nuovo->pros = corr;
}
}
else
{
printf("\n\nMemoria esaurita!\n");
break;
}
free(nuovo);
}
free(info);
}
}
Grazie in anticipo a chiunque volesse rispondermi...buon weekend! :cool: