AprenderC
← Todas las lecciones

Devolver lo que pediste

Lo que pides y no devuelves se queda ocupado.

1Por qué

Cuando pides sitio con malloc, ese sitio queda apartado para ti. El sistema no te lo quita: confía en que vas a avisar cuando termines.

Avisar es free. Le pasas el mismo puntero que te dio malloc y el sitio vuelve a estar disponible.

Si no lo haces, tienes una fuga. En un programa que termina en un segundo no se nota — el sistema lo recupera todo al salir. Pero en uno que corre horas, cada fuga es un pedazo de sitio que ya no vuelve, y el programa va ocupando más y más hasta que la máquina se arrastra. Es de los fallos más caros que existen, y no da ninguna señal mientras ocurre.

Aquí sí la da. El taller lleva la cuenta de lo que pides y de lo que devuelves, y te avisa si al terminar quedó algo suelto.

Dos reglas, y con ellas te ahorras casi todos los problemas: cada malloc tiene un free, y free se hace una sola vez. Devolver dos veces el mismo sitio es un error tan grave como no devolverlo.

2Míralo andar

Este programa funciona. Léelo, y después ejecútalo sin cambiar nada.

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *v = malloc(3 * sizeof(int));
v[0] = 7;
printf("%d\n", v[0]);
free(v);
return 0;
}

3Ahora tú

Este programa escribe lo correcto pero deja algo sin devolver. Arréglalo

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *notas = malloc(4 * sizeof(int));
notas[0] = 5;
notas[1] = 3;
printf("%d\n", notas[0] + notas[1]);
return 0;
}

↖︎ Tu línea va aquí, cuando ya nadie va a usar el sitio.

Ejecutar

Lo que dice tu programa

↖︎ Escribe tu parte y dale a Ejecutar

Qué pasó

Aquí te aviso si tu programa hace algo raro.

    4Qué guarda tu programa

    Memoria

    ↖︎ Ejecuta el programa para ver qué pasa por dentro