Decir que tengo el siguiente programaCuando un programa termina ¿qué ocurre con la memoria asignada utilizando malloc que no está libre?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * i;
if ((i = malloc(sizeof(int) * 100)) == NULL) {
printf("EROOR: unable to allocate memory \n");
return -1;
}
/* memory is allocated successfully */
/* memory is not free'ed but program terminates */
// free(i);
return 0;
}
El programa anterior llama malloc
para asignar parte de la memoria y no llama free
para de-asignarlo. Y el programa termina sin desasignar la memoria.
Valgrind detecta claramente una fuga de memoria.
<snap>
==14209== HEAP SUMMARY:
==14209== in use at exit: 400 bytes in 1 blocks
==14209== total heap usage: 1 allocs, 0 frees, 400 bytes allocated
==14209==
<sanp>
==14209== LEAK SUMMARY:
==14209== definitely lost: 400 bytes in 1 blocks
==14209== indirectly lost: 0 bytes in 0 blocks
==14209== possibly lost: 0 bytes in 0 blocks
==14209== still reachable: 0 bytes in 0 blocks
==14209== suppressed: 0 bytes in 0 blocks
==14209==
==14209== For counts of detected and suppressed errors, rerun with: -v
==14209== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Pregunta:
Cuando el programa termina, lo que ocurre con la memoria que se asignó pero no free
'd?
Actualización: Considere que este código se está ejecutando en un sistema de operación diferente - digamos windows, linux, solarix, macos, etc. ¿Hay alguna diferencia en el comportamiento de este código durante su terminación?
En la mayoría de los sistemas operativos modernos, todos los recursos de los programas se liberan o se cierran. –
¿Puedo preguntarte qué provocó esta pregunta? En lugar de preocuparte por lo que sucede si no lo haces gratis, ¿por qué no te liberas? Entonces puedes dejar de preocuparte; Valgrind sucede, todos están felices. Problema resuelto. –
Duplicado de http://stackoverflow.com/questions/654754/what-really-happens-when-you-dont-free-after-malloc – alexis