Depende de lo que necesite para el búfer.
¿Realmente necesita borrarlo después de cada iteración o quizás un \0
char al final sería suficiente para marcar el final de una cadena? Después de todo, eso es lo que utilizan las diversas llamadas a la biblioteca str
.
Si realmente necesita borrarlo puede usar bzero()
. Ciertamente, malloc'ing y free'ing en cada iteración es un desperdicio de recursos, ya que puede reutilizar felizmente el buffer.
Se produciría un problema diferente si tuviera que paralelizar el bucle for, es decir, tener varios subprocesos simultáneos usándolo.
Ejemplo simple, de la vida real: usando una cubeta para transportar agua. Supongamos que necesita hacer varios viajes con ese cubo: ¿tendría sentido recogerlo, usarlo, dejarlo, recogerlo de nuevo, usarlo, etc.? Puede volver a usar el cucharón tantas veces como sea posible. Si, por otro lado, el cubo necesita ser utilizado por usted y más personas, ya sea que organice el acceso al cucharón o necesite más cubetas.
Última sugerencia: no se preocupe por las actuaciones ahora. Dicen que la optimización temprana es la raíz de todo mal, y pronto entenderán por qué.
En primer lugar, comprenda el problema: escriba el código que puede desecharse. Experimentar. En segundo lugar, pruébelo. Asegúrate de que hace lo que necesitas. En tercer lugar, optimizarlo. Haga que el ciclo se ejecute diez mil veces y mida cuánto tiempo lleva. A continuación, mueva el malloc hacia afuera y vuelva a medir (use el comando de shell time
si está bajo UNIX). En cuarto lugar, reescríbalo porque su primer experimento probablemente será un desastre de parches de try-retry-not working code.
Enjuague, repita.
pd: diviértanse mientras tanto. Se supone que es interesante, no frustrante.
No se puede llamar libre fuera del bucle si hace una llamada a malloc en su interior, o tendrá que filtrarse la memoria para todos pero el malloc desde la última iteración. Sin embargo, puede usar realloc en lugar de malloc, y luego libre. – Cascabel
@Jefromi: Creo que deberías hacer un comentario. –
Tu inglés está bien, es mejor que el inglés de los novatos en SO. –