Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: class_OpenGL en 29 Mayo 2016, 19:53 pm



Título: [C] (Consulta) Duda cuando un programa en C termina y memoria dinámica
Publicado por: class_OpenGL en 29 Mayo 2016, 19:53 pm
Hola, hoy tengo una duda que me gustaría solventar.

¿ANSI C nos asegura que cuando un programa que finaliza bruscamente (con return en la función main), el programa libera la memoria dinámica, o eso solo ocurre dependiendo del sistema operativo?

Espero que se comprenda mi duda. Muchas gracias.


Título: Re: [C] (Consulta) Duda cuando un programa en C termina y memoria dinámica
Publicado por: AlbertoBSD en 29 Mayo 2016, 20:10 pm
En teoria eso depende totalmente del sistema operativo.

Cuando ejecutas el programa el sistema le asigna recursos y al final los recicla.

Si te fijas cuando inicias el programa las variables pueden estar o no estar inicializadas y si te pones a ejecutar un programa y pides un poco de memoria dinamica. puedes imprimir X cantidad de bytes mas y tal vez veas datos de programas viejos.



Título: Re: [C] (Consulta) Duda cuando un programa en C termina y memoria dinámica
Publicado por: class_OpenGL en 29 Mayo 2016, 20:57 pm
Si, pero no me refiero a si los datos quedan guardados, que supongo que si. A lo que me refiero, es, si por ejemplo mi programa ha asignado 100 bytes de memoria dinámica y el programa se cierra sin haber llamado a free, entonces mi pregunta es si a otro programa se le podrían asignar esos mismos 100 bytes o no.

Básicamente, pregunto que si al hacer return en la función main habiendo llamado a malloc, esta instrucción "llama" a free liberando toda la memoria dinámica usada por el programa, o esto lo hace el sistema operativo, o tendría que reiniciar el ordenador porque esa memoria ha quedado asignada a un programa que ya se ha cerrado y "se ha perdido la referencia a esa memoria dinámica". Gracias!


Título: Re: [C] (Consulta) Duda cuando un programa en C termina y memoria dinámica
Publicado por: geeke en 29 Mayo 2016, 21:14 pm
"se ha perdido la referencia a esa memoria dinámica"

Eso no pasa al menos en los sistemas operativos modernos porque estos realizan un seguimiento de toda la memoria reservada por un programa y cuando este finaliza (por cualquier razón) sin haber liberado la memoria el sistema procede a recuperar toda la memoria asignada


Título: Re: [C] (Consulta) Duda cuando un programa en C termina y memoria dinámica
Publicado por: class_OpenGL en 29 Mayo 2016, 21:19 pm
Maravilloso :)

Gracias!