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 (p. Ej., Utilizando malloc
) como está asignado en el montón:
char *arr = malloc(3 * sizeof(char));
strcpy(arr, "bo");
// ...
free(arr);
Más 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 deba, ni siquiera se le permita, de forma gratuita.
(Es lo mismo que cuando dices int n = 10;
: No hay recursos dinámicos involucrados que deba administrar manualmente).
La memoria asociada con arr
se libera automáticamente cuando arr
sale de su 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 free()
en un puntero que fue devuelto por una llamada a malloc
, calloc
o realloc
.