ORRORE (che e' peggio di
errore):
Persona **p = malloc(sizeof(Persona));
SBAGLIATO, doveva essere:
Persona *p = malloc(sizeof(Persona));
nota UN SOLO asterisco, NON DUE
che e'
DIVERSO da questo:
Persona **p = malloc(sizeof(Persona*));
1) sizeof(Persona) | sizeof(int) probabilmente si, ma ci sono tutta una serie di considerazioni da fare
- perche' lo vorresti fare? In altri termini, perche' cercare rogne?
- tu NON SAI se il compilatore aggiunge delle informazioni di servizio alla struct che vengono poi allocate, oppure, molto piu' probabilmente, decide degli allineameti ad indirizzi multipli di 4/8 byte
2) malloc/free allocano e liberano BLOCCHI di memoria, non sanno che cosa c'e' dentro, E VANNO SEMPRE IN COPPIA.
- non puoi DEALLOCARE SOLO UNA PARTE di un blocco allocato con la malloc