ho provato ora e ho notato che effettivamente ho fatto un errore coi puntatori.
Cioè visto che tu vuoi che in una funzione venga modificato un puntatore a struttura. dovrai passare esso per riferimento. ovvero visto che esso stesso è un puntatore la funzione Converti dovrà ricevere come parametro un DOPPIO puntatore.
Forse il concetto non è chiaro.
se alberi è un vettore di puntatori a strutture e la funzione Converti fa "qualcosa" che modifica uno di questi puntatori. vorrà dire che alla funzione Converti passerai L'INDIRIZZO DI UNO DI QUESTI PUNTATORI, altrimenti non riuscirai ad avere in uscita dalla funzione dei dati modificati xkè la modifica di questi avverrà unicamente a livello locale nella funzione Converti.
Se non hai capito(cosa molto probabile date le mie spiegazioni :P) ti consiglio di leggerti una buona guida sui puntatori visto che sono un argomento non proprio banale.
in ogni caso ti mostro la funzione nuova:
codice:
void Converti(int i, NODE **start) //NOTA IL DOPPIO PUNTATORE
{
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;
}
e questa è la chiamata corretta:
codice:
Converti(1,&(alberi[1])); //NOTA L'OPERATORE INDIRIZZO &