2014-07-08 3 views
0

Mon programme Mongodb-c-driver fonctionne correctement, sans erreurs au moment de la compilation et de l'exécution, mais lorsque je vérifie le programme avec Valgrind, j'ai une fuite de mémoire.Erreur de segmentation après le travail de Mongodb-c-driver

==30532== at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 

==30532== by 0x506BCA5: bson_malloc0 (in /usr/local/lib/libbson-1.0.so.0.0.0) 

==30532== by 0x4E3B0CB: mongoc_client_new (in /usr/local/lib/libmongoc-1.0.so.0.0.0) 

==30532== by 0x4009BA: main (ranker.c:28) 

==30532== LEAK SUMMARY: 

==30532== definitely lost: 6,656 bytes in 1 blocks 

==30532== indirectly lost: 2,598 bytes in 11 blocks 

==30532==  possibly lost: 0 bytes in 0 blocks 

==30532== still reachable: 0 bytes in 0 blocks 

==30532==   suppressed: 0 bytes in 0 blocks 

==30532== For counts of detected and suppressed errors, rerun with: -v 

==30532== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 2 from 2) 

La Valgrind note la ligne avec:

client = mongoc_client_new ("mongodb://localhost:27017/"); 

Dans les dernières lignes dans le programme que j'ai:

mongoc_client_destroy (client); 

Qu'est-ce que et que puis-je faire pour éviter FUITE RÉSUMÉ?

Editer: J'ai encore quelques problèmes au cours du travail avec MongoDB, y at-il quelqu'un là-bas qui sait comment puis-je résoudre ce problème?

Répondre

0

Avez-vous appelé mongoc_cleanup() de routine à la fin de principal()? Le pilote MongoDB C possède un état interne initialisé au démarrage (en particulier pour SSL). Il doit être libéré manuellement en appelant la fonction de nettoyage à la fin de votre programme.

Voici un exemple: https://github.com/mongodb/mongo-c-driver/blob/b2b5c6e8ebdcbf8593292ae8efcb91b94aa23995/examples/example-client.c#L72

espoir qui aide,

- Christian

+0

oui j'appelle un mongoc_cleanup() ne fonctionne pas, je vous remercie de toute façon – Sizario