es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo funciona malloc y free con errores?

Estoy aprendiendo sobre malloc() y free() en C y me encontré con una pregunta importante que no pude encontrar en ningún lugar. Como ejemplo, tomemos este fragmento de código simple:

int main(int argc, char *argv[])
{
    char *test = malloc(sizeof(char) * 30);
    strcpy(test, "test");

    FILE *file = fopen("filename", "r");
    if (file == NULL){
        error("No se pudo abrir el archivo");
    }
    free(test);

   ...
}

¿Cómo funciona malloc() y free() en este caso en el que se llama a exit(EXIT_FAILURE) debido a un error? ¿Existen problemas si ocurre un error y la cadena test no se libera? ¿O se libera automáticamente cuando el programa finaliza?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Cuando ocurre un error y el programa se termina con exit(EXIT_FAILURE) antes de llamar a free(test), la memoria asignada por malloc() para la cadena test no se libera de forma explícita. Sin embargo, la mayoría de los sistemas operativos modernos recuperan automáticamente toda la memoria asignada por un proceso cuando este se completa, por lo que es probable que la memoria asignada por malloc() para test se libere automáticamente cuando el programa termina.

    Dicho esto, en general es buena práctica siempre liberar explícitamente cualquier memoria asignada por malloc() antes de que el programa termine, incluso en caso de error. Esto ayuda a garantizar que su programa no genere fugas de memoria, lo cual puede ocasionar problemas de rendimiento y estabilidad a largo plazo.

Comments are closed.