Salve a tutti, avrei un problema con questo codice .
struct list{
int dato;
struct list*next;
};
int main(){
int i,n;
struct list primo;
primo.next=NULL;
struct list* tmp;
*tmp=primo;
scanf(" %d ", &n);
for(i=0;i<n-1;i++){
printf(" %d ", i);
tmp->next=(struct list*)malloc(sizeof(struct list));
tmp=tmp->next;
}
tmp->next=NULL;
*tmp=primo;
while(tmp->next!=NULL){
scanf(" %d ", &(tmp->dato));
tmp=tmp->next;
}
*tmp=primo;
while(tmp->next!=NULL)
printf(" %d ", tmp->dato);
return 0;
}
non capisco perchè ma viene compilato, ma una volta che viene lanciato immetto un valore ( che dovrebbe essere n ) poi un altro valore e mi da segmentation fault.
Per capire dove fosse l'errore dapprima ho messo come nota tutto il ciclo dove si inseriscono i dati e quello che li stampa, ma ancora mi dava segmentation fault,
poi ho provato a inserire un dato solo nel primo elemento dopo che la lista intera era stata creata
e anche in questo caso mi dava segmentation fault,
ho capito quindi che la lista non veniva creata,
Il punto è che se la lista non viene creata perchè mi fa inserire due valori quando lancio il programma?
a norma dovrebbe farmi inserire solo la scanf che inserisce il valore in n (numero degli elementi della lista);
quindi ho provato una cosa che ha dato dei risultati inquietanti:
ho messo come nota tutta la parte del testo dopo lo scanf che prende il valore di n
e ho messo una printf che mi stampi il valore di n
anche in questo caso mi fa inserire due valori e mi saluta con un segmentation fault, non capisco perchè.
come mi può chiedere due volte di dargli degli input se ho messo solo una scanf!!