Questo e' un
STRA-SUPER-ULTRA-MEGA-GIGA-TERA-PETA-EXA-EPTA-OCTA GRAVE ERRORE di semantica!
(robbbbba da licenziamento in tronco/defenestramento durante la sessione d'esame )
(vabbe, scherzo, ma e' un errore ESTREMAMENTE grave!!!)
Il pasticcio fatto nel SECONDO pezzetto di codice ha a che fare con la parte MOOOOOOOLTO COMPLICATA della GESTIONE DELLA MEMORIA in C/C++, ed il concetto di SCOPE di una variabile!
Foglia nu;
ALLOCA la variabile "nu' NELL STACK
Foglia* n = ν
ASSEGNA ad n l'INDIRIZZO di nu. MA nu E' ALLOCATA nello stack
return n;
ritorna, alla funzione chiamante, il VALORE di n. Questo valore e' l'INDIRIZZO di nu SULLO STACK.
MEGA/GIGA/STRA PROBLEMONE!!!!!
All'uscita della funzione "CreaFoglia", la variabile "nu" NON ESISTE PIU'.
Piu' specificatamente: l'indirizzo ESISTE ancora, MA QUELL"AREA DI MEMORIA, prima DEDICATA a "nu", PUO' ESSERE RIUSATA da qualunque altra funzione. In pratica STAI PUNTANDO AD UN'INDIRZZO di memoria CHE NON E' PIU' di tua proprieta'!
DISASTRO ASSICURATO.
E ROGRA STRA-MEGA-ROGNOSA da identificare!!!!
In un programma complesso, ci puoi impiegare anche MESI per trovare un errore del genere!
Perche' potresti avere anche la SUPREMA SFORTUNA che quell'area venga riscritta con valori che SEMBRANO valori validi, con la conseguenza che il programma SEMBRA FUNZIONARE, ma funziona in modo strano!!!
Questo e' il PRINCIPALE motivo per cui i programmatori C/C++ DEVONO ESSERE programmatori DECISAMENTE ESPERTI!