succede questo per 2 motivi. Il primo è che con l'ultima istruzione non esporti il risultato vero e proprio ma vai a modificare una variabile LOCALE (start è una variabile locale e come tale non esporta i dati in uscita. per avere le modifiche in uscita devi usare l' * con il quale accedi alla cella di memoria voluta).
secondo è che la variabile nuovo di tipo NODE viene allocata nello stack della funzione Converti, con la conseguenza che all'uscita della funzione la perdi o in ogni caso anche se non vengono eliminati i dati puoi aver problemi di varia natura(sovrascrittura, segmentation fault ecc.)
un modo corretto per riuscire ad avere la struttura all'uscita è allocandola nello heap.
se non mi sono incasinato coi puntatori(nell'ultima istruzione) questa dovrebbe essere la procedura corretta.codice:void Converti(int i, NODE *start) { NODE* nuovo; /*chiediamo al sistema operativo della memoria di dimensione sizeof(NODE) e castiamo il puntatore (malloc restituisce void*) come puntatore a NODE (NODE*). */ nuovo =(NODE*) malloc(sizeof(NODE)); nuovo->label=i; nuovo->dir=0; nuovo->jump_to=NOWHERE; *start=nuovo; }


Rispondi quotando