Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C]Problema nella creazione di un albero

    Ragazzi ecco il programma:
    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);
          }
    Il problema sussiste nella funzione costruiscialbero. Si avvia ma crasha. Come mai?

    AGGIORNAMENTO: inserendo dei printf per vedere dove crashava ho scoperto che il problema nasce nel momento della chiamata alla funzione ricorsiva dell'albero. Soluzioni?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Come mai le malloc per autore e titolo sono di dimensioni diverse tra il main e la funzione ...?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: [C]Problema nella creazione di un albero

    codice:
          else {p->n++; if(strcmp(p->item.ISBN,m.ISBN < 0))
    every day above ground is a good one

  4. #4
    Ho sbagliato alla malloc per un copia incolla inadeguato, ma il programma continua a crashare

    YuYevon: non ho capito o.O

    Sono un pirla, trovato l'errore xD grazie ragazzi

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.