代码之家  ›  专栏  ›  技术社区  ›  BAE

mongoc_init()和mongoc_cleanup()可能会使内存“仍然可以访问”

  •  1
  • BAE  · 技术社区  · 9 年前

    我有一个使用mongodb-c-driver执行mongodb操作的类。在构造函数中,调用mongoc_init()。在解构器中,调用mongoc_cleanup()。然后,valgrind 3.10.1告诉我一些内存“仍然可以访问”。valgrind输出的一部分如下:

    ==23222==在586的丢失记录586中,1个块中的16384个字节仍然可以访问

    ==23222==位于0x4C2D199:realloc(vg_replace_malloc.c:692)

    ==23222==由0x6243894:CRYPTO_realloc(在/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中)

    ==23222==由0x62BE1F1:lh_insert(在/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中)

    ==23222==通过0x62C0828:???(在/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中)

    ==23222==通过0x62C0243:???(在/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中)

    ==23222==由0x5FCB01D:ERR_load_SSL_string(在/lib/x86_64-linux-gnu/libssl.so.1.0.0中)

    ==23222==由0x5083623:_mongoc_ssl_init(在/usr/local/lib/libmongoc-1.0.so.0.0.0中)

    ==23222==按0x5077028:_mongoc_do_init(在/usr/local/lib/libmongoc-1.0.so.0.0.0中)

    ==23222==通过0x529A3FF:pthread_once(pthread_once.S:104)

    ==23222==由0x400F305:call_init.part.0(dl-init.c:85)

    ==23222==通过0x400F3DE:call_init(dl-init.c:52)

    ==23222==通过0x400F3DE:_dl_init(dl-init.c:134)

    ==23222==通过0x40016E9:???(在/lib/x86_64-linux-gnu/ld-2.15.so中)

    ==23222==泄漏汇总:

    ==23222==仍可访问:3075块中的91832字节

    当我评论这两个函数mongoc_init()和mongoc_cleanup()时,valgrind告诉我所有堆块都被释放了。

    知道吗?

    谢谢

    1 回复  |  直到 9 年前
        1
  •  0
  •   BAE    9 年前

    这似乎是mongodb-c驱动程序的问题。 其他人在mongodbc驱动程序项目下报告了同样的问题。 https://jira.mongodb.org/browse/CDRIVER-478