Si encuentras algún detalle que no entiendes puedes comentarlo y te ayudaremos tan rápido como podamos.
Solución:
Las variables locales se liberan automáticamente cuando finaliza la función, no es necesario que las libere usted mismo. Solo libera memoria asignada dinámicamente (por ejemplo, usando malloc
) tal como está asignado en el montón:
char *arr = malloc(3 * sizeof(char));
strcpy(arr, "bo");
// ...
free(arr);
Más información sobre la asignación de memoria dinámica: http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
No liberas nada en absoluto. Dado que nunca adquirió ningún recurso de forma dinámica, no hay nada que tenga que liberar, ni siquiera se le permita liberar.
(Es lo mismo que cuando dices int n = 10;
: No hay recursos dinámicos involucrados que deba administrar manualmente).
La memoria asociada a arr
se libera automáticamente cuando arr
sale fuera de alcance. Es una variable local o se asigna estáticamente, pero no se asigna dinámicamente.
Una regla simple que debe seguir es que solo debe hacer cada llamada free()
en un puntero que fue devuelto por una llamada a malloc
, calloc
o realloc
.
Puedes añadir valor a nuestra información participando con tu veteranía en las interpretaciones.