Gracias por tus palabras, dicen que explicar es aprender dos veces, aunque no te aferres a lo que te explico yo también estoy aprendiendo "errare humanum est", y recordá siempre la frase "No hay cuchara" jejejej.
Básicamente vas a liberar la memoria que no sea liberada de forma automática. Un puntero puede ser almacenado en stack, así que el puntero se libera automático, más no así la dirección a la que esté apuntando, que pudiera ser tanto una dirección que también está en el stack o que se encuentra en heap. Si se encuentra en heap deberás liberarla con free() pero solo a la dirección que apunta este puntero.
En tu caso si pasas variables que son de stack simplemente podés pasar la dirección de esa variable, y atraparlas desde la función llamada con un puntero de stack también... así que nada de uso de free() ni malloc() en este caso particular y la máquina estará encantada de ejecutar tu programa igualmente.