Duda con memoria dinamica.

leo
19 de Abril del 2010
Hola a todos, como va. Mi pregunta talves sea media tonta, pero hace tiempo que no me la puedo sacar de la cabeza; el tema es cuando asigno memoria en forma dinamica para alguna variable puntero, por ejemplo, si hago:
....
double *arreglo;
arreglo_ = (double*) malloc (sizeof(double) * 5000);
....
....
return 0;
Luego el programa termina y me olvido de liberar dicha memoria con un free(arreglo). Entonces no me queda claro si ese bloque de memoria queda inaccesible para siempre, o se libera automaticamente al cerrar el programa?
Puede ser que la memoria se pierda y de esta forma mi pc quede con menos memoria ram cada ves que me olvide de hacer free, o cada ves que un programa se interrumpe por algun error y tampoco llegue a liberar la memoria reservada?

Desde ya muchas.

Capitan Kirk
19 de Abril del 2010
Se supone que, al finalizar el programa, deber铆a devolver al sistema operativo todos los recursos que ha utilizado, por lo que, aunque no liberes expl铆citamente la memoria al terminar el programa, los bloques reservados se devuelven al sistema. Pero no hay ninguna garant铆a de que esto sea as铆, de hecho es responsabilidad del programa devolver al sistema los recursos que le haya requerido. El compilador, supuestamente, a帽ade a tu programa el c贸digo que necesita para pedir recursos al ejecutar el programa y el c贸digo para liberarlos al finalizar, pero no tienes ninguna garant铆a de que esto se efect煤e de manera correcta.

Por ello, no conviene hacer lo que indicas que haces. No pasa nada en programas peque帽os, pero si la aplicaci贸pn crece y las reservas de memoria se hacen en funciones llamadas varias veces y no se liberan, si que puedes encontrarte con que, en un momento dado, tu aplicaci贸n ya no puede obtener la memoria que va necesitando. Por ello, es conveniente liberar la memoria reservada conforme ya no se necesite. Un par de consejillos:

1. Cuando hagas una reserva de memoria, prepara inmediatamente el c贸digo para su liberaci贸n. As铆 no se te olvida.

2. Siempre que sea posible, libera los bloques de memoria reservados en orden inverso al de su creaci贸n. Esto puede ayudar a evitar la fragmentaci贸n de la memoria disponible.

Saludos,

leo
21 de Abril del 2010
Muchas gracias Capitan Kirk por la respuesta, ahora me qued贸 claro, y estoy mas tranquilo al momento de usar memoria dinamica, sigo tus consejos.
Nuevamente gracias por responder.
Saludos.