No problem ... un forum e' fatto per le domande.Originariamente inviato da U-bahn
scusa la mole non indifferente di domande![]()
1) la funzione printf non controlla che i dati del buffer da visualizzare siano stati allocati correttamente. Essa lavora a partire dall'indirizzo iniziale fino a quando non trova uno zero binario '\0'. L'unico errore puo' essere rilevato se l'indirizzo del dato trattato non e' appartenente al processo attuale (e' il sistema operativo su segnalazione della CPU che interviene in questo caso ...). Ma, nella maggior parte delle volte, anche se il buffer non e' allocato correttamente, in memoria esistono altre variabili facenti parte del processo corrente su sui la printf "sborda" ...
2) la free libera tutta la memoria allocata ma ... attenzione al punto 3
3) l'assegnazione e' corretta. In pratica allochi dinamicamente un buffer e in seguito assegni il puntatore all'area allocata al puntatore contenuto nella struttura.
Ma a questo punto il puntatore a buffer non va passato alla free perche', altrimenti libereresti l'area per i dati di artist che ti serve ancora. Al contrario, quando devi liberare la memoria, devi fare la free di nxt->artist e di tutti le altre aree di memoria allocate.