PDA

Visualizza la versione completa : [C]Problema con lista


Metalmino
08-02-2013, 22:30
Ho questo codice:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
typedef struct dispensa* disp;
struct dispensa{
char* codice;
char* descrizione;
int quantita;
disp next;
};

void stampalista(disp il);
disp search_node(disp il,char* cod);
disp insert_head(disp il,disp tmp);

int main(int argc, char *argv[]) {
char* cod; char* desc; int quant; cod=malloc(sizeof(char)*256);
FILE* fp;
fp=fopen("dispensa.txt","r");
disp il=NULL;
disp tmp;
tmp=NULL;
while(!feof(fp))
{
desc=malloc(sizeof(char)*256);
fscanf(fp,"%256[^;];%256[^;];%d\n", cod,desc,&quant);
il=search_node(il,cod);
if(il!=NULL)
il->quantita+=quant;
else{
tmp=malloc(sizeof(struct dispensa));
tmp->codice=malloc(sizeof(char)*256);
strcpy(tmp->codice,cod);
tmp->descrizione=malloc(sizeof(char)*256);
strcpy(tmp->descrizione,desc);
tmp->quantita=quant;
tmp->next=NULL;
il=insert_head(il,tmp);
}}

stampalista(il);

system("PAUSE");
return 0;
}

disp search_node(disp il,char* cod)
{
//if((il==NULL) || (strcmp(il->codice,cod) == 0)) return il;
//else return search_node(il->next, cod);
while(strcmp(il->codice,cod)!=0 && il!=NULL)
{
il=il->next;
}
return il;
}


void stampalista(disp il)
{
while(il->next!=NULL)
{
printf("%s\t%s\t%d\n",il->codice,il->descrizione,il->quantita);
il=il->next;
}
}

disp insert_head(disp il,disp tmp)
{
if(il!=NULL)
tmp->next=il;
return tmp;
}


Mi crasha con la funzione di ricerca del nodo, come mai? Devo preparare un esame per giovedý xD

oregon
08-02-2013, 22:37
Ovvio che hai un crash ... all'inizio, appena entri nella search_node il puntatore

disp il

Ŕ NULL.

Metalmino
08-02-2013, 22:52
E ma essendo NULL non dovrebbe ritornare il e basta al primo giro? Non riesco a capire.

oregon
08-02-2013, 22:57
Veramente esegue questa linea

while(strcmp(il->codice,cod)!=0 && il!=NULL)

che crea il crash

Loading