ezio1400 ha scritto:
1- Perchè se escludo la riga in cui è presente la funzione malloc il programma si interrompe?
In riferimento a questo punto, tieni bene presente che ogni volta che usi un puntatore stai usando una variabile come le altre, l'unica differenza, come ben sai, è che stai puntando ad un indirizzo(e quindi area) di memoria. Una buona pratica è inizializzarlo, così come si fa con tutte le variabili, ad esempio con un
nullptr o
NULL. Ogni volta che lo usi potresti controllare che il tuo puntatore è valido, ovvero punta ad un'area di memoria diversa dal valore
null di inizializzazione. È chiaro che quando chiami la
free dell'area di memoria è opportuno che il puntatore venga "resettato" facendolo puntare nuovamente ad un valore null, proprio come quando l'hai inizializzato. Capisco che a priva vista queste possono sembrare pratiche inutili, o meramente pragmatiche. Ad esempio può sembrare inutile fare il check ad ogni utilizzo del puntatore. Tuttavia questa pratica ti assicura di evitare problemi come accedere ad aree di memoria che non sono valide oppure che appartengono ad un'altra variabile.