Bonjour, 
J'ai cru bon, suite à la réponse de "gerald3d", qui m'avait semblé claire et évidente, de solder la discussion.
Mais apparemment, j'ai fait une petite boulette. 
Merci en tout cas de relancer le sujet... et de recréer le doute dans mon esprit. 
Ton explication est claire elle aussi et convaincante, mais alors, que dois-je faire ?
Ne rien détruire... en me disant que de toute façon le système s'en chargera. ( ce qui dans ce cas, semble faux. )
Ou bien,
Détruire les Widgets qui ne sont plus utilisés avec, g_object_unref() et gtk_widget_destroy().
Je ne suis pas un "pro" mais un amateur qui se veut consciencieux.
C'est donc plus pour mon éducation qu'autre chose et pour me permettre de faire les choses CORRECTEMENT.
J'ai eu à utiliser la SDL pour un petit programme de "Labyrinthe" et je ne m'étais pas autant posé la question.
Si je me souviens bien, la doc est très précise en la matière: Il convient de détruire toutes créations par un "SDL_DestroyQuelqueChose(pXXX).
Mais je soupçonne ne pas être le seul à me poser ce genre de question et à en attendre ( ou espérer ) une réponse franche et tranchée... Style SDL.
J'ai je pense et j'espère, bien compris ton premier paragraphe: "oui et non".
Où il est question d'adopter la bonne méthode en fonction de l'application.
J'avais déjà entendu parlé de ces "compteurs de références" sans trop bien comprendre...
C'est maintenant UN PEU plus clair... mais ça reste encore très flou, ne voyant pas trop l'intérêt de ce fameux "compteurs".
J'ai lu et je relirai avec beaucoup d'attention ton lien sur "la gestion de la mémoire avec GTK", mais c'est en anglais.
Shakespeare et moi, on est pas trop copain, même si je me fais largement aider par "Google", ça reste pas évident à comprendre.
Je ne connaissais pas et je le garde sous le coude le: "gtk_widget_hide_on_destroy:"
Donc, si j'ai bien tout compris et si je résume tes explications.
Un GtkWidget sera toujours créé sur le tas via malloc.
Je devrai donc, en sortant de sa fonction créatrice (boucle ou autre), le détruire de la façon suivante.g_object_unref(pMonWidget); --> remise à zéro du compteur de référence.
gtk_widget_destroy(pMonWidget); --> Libération de la mémoire.
Et éventuellement ( afin de faire les choses correctement ) libérer le pointeur qui va avec et qui lui, a été créé sur la pile et qui de toute façon sera détruit à la fermeture du programme.g_free(pMonWidget); ( et non pas free(pMonWidget); )
Faut-il aussi remettre le pointeur à NULL ? ( pMonWidget = NULL; )
En attendant d'autres réponses... je remets le fil à "non résolu".
Donc à suivre.
Et encore merci pour cette relance.
Claude
Partager