El bucle anterior sobra. Cuando hiciste la reserva de memoria, únicamente usaste un
malloc, luego el bloque de memoria se ha de liberar únicamente con un
free.
Por otro lado, "free(regEmp)"
SI que libera la memoria. Liberar la memoria únicamente sirve para decirle al Sistema Operativo que esa región de memoria puede ser utilizada por quien la pida... liberar la memoria no implica sobreescribir lo que ya está almacenado en la misma. Lo que sucede es que la siguiente instrucción "regEmp = NULL;" implica únicamente un cambio local, por lo que el puntero
registro no se entera.
Dicho de otra forma:
regEmp es un puntero, sí, pero también es una variable local de
funcion. Todos los cambios que realices en la memoria apuntada se verán reflejados fuera de la función... pero si haces que
regEmp apunte a otra región de memoria, entonces ese cambio es local.
Si quieres que
registro acabe apuntando a
NULL necesitas usar un puntero doble tal que:
Código C:
Ver originalfuncion(®istros, numRegistros);
// Nota que nEmpleados no es necesaria en la función
funcion(tipoEmpleado **regEmp, int nEmpleados) {
//Libero array
*regEmp = NULL;
}
Un saludo