#25 Nadie nace sabiendo, me temo. Pero con voluntad y apoyo de la comunidad poquito a poquito se va avanzando.
Si tú pides memoria con new, malloc, etc. normalmente también eres responsable de liberarla con free.
En el caso en que usas alloca se reserva memoria en la pila de la función padre (en este caso main()), así que no necesitas liberarla. Cuando termina main() esta memoria se libera automáticamente. Es una función conveniente, pero limitada en el tamaño que puede reservar. Equivale a declarar la variable al principio de la función.
Normalmente las librerías traen mecanismos implícitos o explícitos para liberar la memoria. que reservan.
Por ejemplo, si usas snd_seq_open deberías al salir llamar a
snd_seq_close al salir del programa (ya sea salida controlada o por algún error, conviene reconducir todos los puntos de salida del programa a uno sólo donde se limpia todo).
En GTK bastante de la gestión de memoria está muy automatizada. Cuando añades un widget a una ventana ésta se convierte en su padre y se hace responsable de destruirlo cuando la ventana sea destruida. Las ventanas top level se destruyen solas (y a todos sus hijos) cuando se pulsa el botón de cerrar. Así que creo que por ahí no tienes que hacer nada.
En double_to_char haces malloc y luego le pasas el string a gtk_label_new. Si no me equivoco ahí tienes una fuga, gtk_label_new hace una copia de tu string así que después tienes que liberarlo porque lo has generado dinámicamente.
Alguien escribió:
etiq3desv = gtk_label_new (double_to_char((int)DESV, 0));
sería
Alguien escribió:
char *s = double_to_char((int)DESV, 0); /* double_to_char devuelve memoria reservada con malloc */
etiq3desv = gtk_label_new (s);
free(s);
Digamos que por cada open tiene que haber un close, y por cada malloc/new un free a no ser que ese free esté implícito en algún otro sitio, como pasa con los widgets gtk.