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;}
- línea 6
Aquí se pide. A partir de esta línea el sitio es tuyo y de nadie más. - línea 11
Aquí se devuelve. Va al final, cuando ya no hace falta: después de esta líneavno se puede usar.
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