Ragazzi ecco il programma:
Il problema sussiste nella funzione costruiscialbero. Si avvia ma crasha. Come mai?codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #define ISBN_TYPE 13 struct libri { char* ISBN; int anno; char* autore; char* titolo; float prezzo; }; typedef struct albero* ramo; struct albero { int n; struct libri item; ramo destro; ramo sinistro; }; ramo costruiscialbero(ramo p, struct libri m); int main() { ramo inizioalbero=NULL; struct libri item; item.ISBN=malloc(sizeof(char)* (ISBN_TYPE +1)); item.autore=malloc(sizeof(char)*256); item.titolo=malloc(sizeof(char)*256); FILE* fp; fp=fopen("books.txt","r"); if(fp==NULL) { printf("Errore nell'apertura del file"); return 0;} while(!feof(fp)) { fscanf(fp,"%256[^;];%d;%256[^;];%256[^;];%2f\n",item.ISBN,&(item.anno),item.autore,item.titolo,&(item.prezzo)); inizioalbero=costruiscialbero(inizioalbero,item); } fclose(fp); system("PAUSE"); return 0; } ramo costruiscialbero(ramo p, struct libri m) { if(p==NULL) { p=malloc(sizeof(struct albero)); p->item.ISBN=malloc(sizeof(char)*(ISBN_TYPE +1)); strcpy(p->item.ISBN,m.ISBN); p->item.anno=m.anno; p->item.autore=malloc(sizeof(char)*(ISBN_TYPE +1)); strcpy(p->item.autore,m.autore); p->item.titolo=malloc(sizeof(char)*(ISBN_TYPE +1)); strcpy(p->item.titolo,m.titolo); p->item.prezzo=m.prezzo; p->n=0; p->destro=NULL; p->sinistro=NULL;} else {p->n++; if(strcmp(p->item.ISBN,m.ISBN < 0)) p->sinistro=costruiscialbero(p->sinistro,m); else p->destro=costruiscialbero(p->destro,m);} return (p); }
AGGIORNAMENTO: inserendo dei printf per vedere dove crashava ho scoperto che il problema nasce nel momento della chiamata alla funzione ricorsiva dell'albero. Soluzioni?

Rispondi quotando
