Salve,
Il codice dovrebbe generare un albero di ricerca derivato da un array e stampare la visita simmetrica purtroppo mi da segmentation fault subito dopo aver immesso i valori dell'array ,
tramite varie prove son riuscito a capire che l'errore deve stare nelle righe tra l'inizio del main e l'allocazione dinamica del puntatore alla struct nodo p,
qualcuno è così gentile da spiegarmi come mai incorro in questa segmentation fault ? proprio non riesco a spiegarmi il perchè
codice:// VISITA SIMMETRICA RICORSIVA ALL'ALBERO #include<stdio.h> #include<stdlib.h> typedef struct nodo* punt; struct nodo{ int dato; punt sx; punt dx; }; void NodeGen(int *A, int i, punt p){ punt temp; punt predec; temp=(punt)malloc(sizeof(struct nodo)); predec=(punt)malloc(sizeof(struct nodo)); *predec=*p; while(predec!=NULL){ *temp=*predec; if(A[i]>predec->dato) predec=predec->dx; else predec=predec->sx; } if(A[i]>temp->dato) temp->dx=predec; if(A[i]<temp->dato) temp->sx=predec; predec->dato=A[i]; predec->sx=NULL; predec->dx=NULL; } void VisitaSimmetrica(punt p){ if(p->sx!=NULL && p->dx!=NULL){ VisitaSimmetrica(p->sx); printf("%d", p->dato); VisitaSimmetrica(p->dx); } else{ if(p->sx==NULL ){ if(p->dx==NULL){ printf("%d",p->dato); } else{ printf("%d",p->dato); VisitaSimmetrica(p->dx); } } else{ if(p->dx==NULL){ VisitaSimmetrica(p->sx); printf("%d",p->dato); } } } } int main(){ int i,N; int *A; punt p; scanf("%d",&N); A=malloc(N*sizeof(int)); for(i=0;i<N;i++) scanf("%d",&A[i]); printf(" è ora della Segmentation Fault "); p=(punt)malloc(sizeof(struct nodo)); p->dato=A[0]; p->sx=NULL; p->dx=NULL; for(i=1;i<N;i++) NodeGen(A,i,p); VisitaSimmetrica(p); }

Rispondi quotando