be, anche se il goto e' poco utilizzato, ci sono delle situazoni dove e' assai utile, es. nella gestione degli errori fatali.
(diversamente in C++ e' possibile lavorare con le eccezioni).

Se non vuoi usare il goto (e faresti bene a non usarlo) ti consiglio di sviluppare il programma in modo da racchiudere l' azione principale in un ciclo while(...)
giocando con while() ed if() sicuramente puoi evitare di usare goto.


Per svuotare le variabili, free() libera memoria allocata dinamicamente, ma se non hai allocato una porzione di memoria in modo dinamico, free() serve a poco....
Sinceramente non mi e' chiarissima la domanda che poni, solitamente per svuotare una variabile e' sufficiente assegnarle un valore NULL.
Se la tua "variabile" in oggetto e' uno stream dai un occhiata alle funzioni flush() o flushall().
ciao ciao