Tu as essayé de tracer ton programme avec GDB en surveillant les valeurs de tes arguments.
J’avais fait un projet perso en C/GTK+ et je me souviens d’un bug où tout crashait après une manip dès que je bougeais la souris. Je ne me souviens plus de la cause mais GDB m’avait sorti d’affaire. Je crois que j’avais pas passé le bon pointeur, du coup l’adresse changeait au lieu de la valeur (ça n’a pas de sens ce que je raconte mais c’était un truc puant comme ça). Bref, regarde bien les signature de tes méthodes, on sait jamais.
L’autre truc que je rencontrais souvent c’était les double-free:
- tu fais un free(pointeur)
- ton code continue de tourner et la mémoire qu’utilisait le pointeur est recyclée. De nouvelles données y sont écrites
- plus loin dans ton code, tu refais un free(pointeur) par erreur, ce qui efface les données innocentes. Ça peut aussi être du code qui est effacé, ce qui produit des bugs assez violents.
Je ne suis plus très frais avec le C mais je crois que j’avais pris l’habitude setter mes pointeurs à NULL après un free() mais il y a surement plus rusé.
Initialiser ses variables aussi. Un int est initialisé avec la valeur qui se trouve en mémoire à ce moment là. Souvent 0, mais pas toujours. Attaquer une boucle en pensant que sa variable fraichement déclarée est définie à 0 ça crée des bugs aléatoires.
À défaut de GDB, un bon vieu printf de tes pointeurs pour voir si tout roule.
N’hésite pas à poster du code aussi.
P.S: Ah mais attends! ListBox* ce ne sont pas des nouvelles méthodes visant à remplacer les Tree/ListModel/View/Store ? J’ai vu passer un blog ou je ne sais quoi d’un gars qui avait joué avec et finalement était revenu sur une List traditionnelle (performances pas top)
Edit: J’ai retrouvé le post. C’est l’auteur d’un journal linuxfr sur GTKTree/List qui commente sur ListBox https://linuxfr.org/nodes/116386/comments/1762103
Si tu es l’auteur, alors je ne t’apprends rien, désolé.