Ça commence à faire un moment que je n'ai rien écrit, et pour cause, je suis quelqu'un de très occupé ! (comment ça c'est pas crédible ?)
Je suis "victime" depuis quelques jours d'un instabilité assez irritante de ma ligne ADSL. Mais je ne vous parlerai pas de ça aujourd'hui.
Non, aujourd'hui, je vais revenir sur cet article.
Je vous avais dit que j'avais "porté à l'arrache" ce bout de code que j'avais initialement écrit avec la glib.
J'ai pris le temps de tester ce portage, et il y avait en fait 2-3 petites erreurs.
La première :
DataTable *ret = NULL;
ret = malloc (sizeof(*DataTable)); // faux
ret = malloc (sizeof(*ret)); // bon
De même :
void
free_datacase_full (DataCase *pCase, void *pData) // faux
void
free_datacase_full (DataCase *pCase, void **pData) // bon
Et enfin :
pData[0] = &cpt; // faux
pData[0] = ((void*) (long) (cpt)); // bon
Pour faciliter la lecture, j'ai donc utilisé des macro et des typedef.
Vous trouverez à cette adresse une archive contenant les sources corrigées.
Le code passé sous valgrind donne ceci :
==3264== HEAP SUMMARY:
==3264== in use at exit: 0 bytes in 0 blocks
==3264== total heap usage: 50 allocs, 50 frees, 478 bytes allocated
==3264==
==3264== All heap blocks were freed -- no leaks are possible
==3264==
==3264== For counts of detected and suppressed errors, rerun with: -v
==3264== ERROR SUMMARY: 18 errors from 2 contexts (suppressed: 11 from 6)
Il n'y a donc aucune fuite mémoire. Juste quelques erreurs, mais c'est un point que je ne maîtrise pas encore.