PDA

Visualizza la versione completa : liste concatenate in c


etzocri
11-07-2002, 10:02
AIUTO!!!sono uno studente di informatica...
ho un problema con le liste... il programma qui sotto non funziona... non ha errori di compilazione ma all'avvio mi da errori di violazione accesso in memoria.... vi prego aiutatemi!!!!
cosa c'è che non va?


#include <stdio.h>
#include <stdlib.h>
#define A 10


typedef struct Lista{
int valore;
char stringa[A];
struct Lista *coda;
}lista;


stampa(lista *p);
lista crea_nuovo();


stampa(lista *p){
do {
printf("\nIl valore introdotto :%d",p->valore);
printf("\nLa stringa :%s",p->stringa);
p=p->coda;

}while(p->coda!=NULL);
return 0;
}


Lista crea_nuovo(){

Lista *p;
p=(Lista*) malloc(sizeof(Lista));
printf("Inserisci un valore intero:\n");
scanf("%d", &p->valore);
printf("Inserisci la stringa:\n");
scanf("%s", &p->stringa);
p->coda=NULL;
return (*p);
}


int main(){
int scelta;
Lista *inizio,*p;
inizio=p=(Lista*) malloc(sizeof(Lista));
do{
printf(" menu \n");
printf("\n1...........inserisci");
printf("\n2...........stampa");
printf("\n3...........inserisci un altro");
printf("\n4...........esci\n");
scanf("%d",&scelta);

switch(scelta){
case 1:{if(inizio){printf("Inizializziamo la Lista:\n");
printf("Inserisci un valore intero:\n");
scanf("%d", &inizio->valore);
printf("Inserisci la stringa:\n");
scanf("%s", &inizio->stringa);
inizio->coda=NULL;
continue;}
else printf("errore");}


case 2:{stampa(inizio);
break;};


case 3:{*p->coda=crea_nuovo();
continue;};


case 4:exit(1);
}


}while(scelta);


return 0;
}

disa
11-07-2002, 10:33
dai un occhio alla funzione crea_nuovo,
mi pare che lŽelemento precedente della lista non abbia riferimento allŽelemento nuovo...
non dovresti fare
p->coda=(*lista)malloc...?

ciao:ciauz:

disa
11-07-2002, 10:34
ho detto una vaccata... scusatemi....:quote: :quote: :quote:

disa
11-07-2002, 10:40
piano piano ne esco...

inizio=p=(Lista*) malloc(sizeof(Lista));

dovrebbe essere questa la riga incriminata...

*inizio
*p

prova e spera...

etzocri
11-07-2002, 10:52
l'errore era nella funzione main... ecco la soluzione:
comunque grazie lo stesso..}:D


case 1:if(inizio==NULL){
printf ("Inizializziamo la Lista:\n");
inizio = p = crea_nuovo();}

else
{p->coda = crea_nuovo();
p = p->coda;

Loading