Sto scrivendo una libreria sulle operazioni principali che si fanno sulle liste, ma ho un problema con l'inserimento in coda... quando arriva all'inserimento in coda crasha il programma e non riesco a capire perchè... posto il codice intero così se qualcuno ha 2 minuti può provarlo direttamente... grazie in anticipo
codice:#include <stdio.h> #include <stdlib.h> #include <string.h> // definizione della struttura per la lista struct nodolista { int Info; struct nodolista *Next; }; typedef struct nodolista LISTA; // inizializza il primo elemento della lista a NULL void Crea(LISTA **Head); // inserisce un elemento in testa alla lista void InserisciTesta(LISTA **Head, int val); // inserisce un elemento in coda alla lista void InserisciCoda(LISTA **Head, int val); // stampa la lista void Stampa(LISTA *Head); // dealloca la memoria allocata per la struttura "LISTA" void Dealloca(LISTA **Head); main() { LISTA *Head; int i, N, valore; Crea(&Head); printf("Quanti elementi vuoi inserire nella lista? "); scanf("%i", &N); for (i=0; i<N; i++) { printf("Inserisci l'elmento [%i]: ", i+1); scanf("%i", &valore); InserisciTesta(&Head,valore); } Stampa(Head); printf("Inserisci l'elmento da inserire in coda: "); scanf("%i", &valore); InserisciCoda(&Head,valore); Stampa(Head); Dealloca(&Head); system("pause"); } // inizializza il primo elemento della lista a NULL void Crea(LISTA **Head) { *Head=NULL; } // inserisce un elemento in testa alla lista void InserisciTesta(LISTA **Head, int val) { LISTA *Temp, *Next; Next=*Head; Temp=(LISTA *)malloc(sizeof(LISTA)); Temp->Info=val; Temp->Next=Next; *Head=Temp; } // inserisce un elemento in coda alla lista void InserisciCoda(LISTA **Head, int val) { LISTA *Temp,*Tail; Temp=(LISTA *)malloc(sizeof(LISTA)); Temp->Info=val; Temp->Next=NULL; if (*Head=NULL) { *Head=Temp; } else { Tail=*Head; while (Tail->Next) { Tail=Tail->Next; } Tail->Next=Temp; } } // stampa la lista void Stampa(LISTA *Head) { int i; if (Head==NULL) { printf("Errore: Impossibile Stampare, Lista Vuota\n"); } else { printf("Lista:\n"); while(Head!=NULL) { printf("%d -> ", Head->Info); Head=Head->Next; } printf("NULL\n"); } } // dealloca la memoria allocata per la struttura "LISTA" void Dealloca(LISTA **Head) { LISTA *Temp; while ((*Head)!=NULL) { Temp=*Head; (*Head)=(*Head)->Next; free(Temp); } }

Rispondi quotando