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;
}