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?