C++ mongocxx::instance inst{}内存泄漏;

C++ mongocxx::instance inst{}内存泄漏;,c++,linux,mongodb,mongo-cxx-driver,C++,Linux,Mongodb,Mongo Cxx Driver,Valgrind使用mongocxx::instance inst{}给我一个仍然可以访问的记录 ==3014== 16,384 bytes in 1 blocks are still reachable in loss record 609 of 609 ==3014== at 0x5374C20: realloc (vg_replace_malloc.c:662) ==3014== by 0x396046ACCE: CRYPTO_realloc (in /usr/lib64/li

Valgrind使用mongocxx::instance inst{}给我一个仍然可以访问的
记录

==3014== 16,384 bytes in 1 blocks are still reachable in loss record 609 of 609
==3014==    at 0x5374C20: realloc (vg_replace_malloc.c:662)
==3014==    by 0x396046ACCE: CRYPTO_realloc (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x39604E604D: lh_insert (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x39604E87C8: ??? (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x39604E814B: ??? (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x396054C2FD: ERR_load_CMS_strings (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x3963045A38: SSL_load_error_strings (in /usr/lib64/libssl.so.1.0.1e)
==3014==    by 0x62BD653: ??? (in /usr/lib64/libmongoc-1.0.so.0.0.0)
==3014==    by 0x62A2278: ??? (in /usr/lib64/libmongoc-1.0.so.0.0.0)
==3014==    by 0x395BC0CE02: pthread_once (in /lib64/libpthread-2.12.so)
==3014==    by 0x55ADDE5: std::unique_ptr<mongocxx::v_noabi::instance::impl, std::default_delete<mongocxx::v_noabi::instance::impl> > core::v1::make_unique<mongocxx::v_noabi::instance::impl, void, std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> > >(std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> >&&) (in /usr/lib64/libmongocxx.so.3.0.3)
==3014==    by 0x55ADAEE: mongocxx::v_noabi::instance::instance(std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> >) (in /usr/lib64/libmongocxx.so.3.0.3)
==3014==    by 0x55ADCF4: mongocxx::v_noabi::instance::instance() (in /usr/lib64/libmongocxx.so.3.0.3)
==3014==    by 0x4F6188: main (main.c:280)
==3014==16384字节在609的丢失记录609中仍然可以访问到
==3014==at 0x5374C20:realloc(vg\u replace\u malloc.c:662)
==3014==by 0x396046ACCE:CRYPTO_realloc(in/usr/lib64/libcrypto.so.1.0.1e)
==3014==by0x39604e604d:lh_插入(in/usr/lib64/libcrypto.so.1.0.1e)
==3014==0x39604E87C8:???(in/usr/lib64/libcrypto.so.1.0.1e)
==3014==0x39604E814B:???(in/usr/lib64/libcrypto.so.1.0.1e)
==3014==by 0x396054C2FD:ERR_load_CMS_字符串(in/usr/lib64/libcrypto.so.1.0.1e)
==3014==by 0x3963045A38:SSL\u load\u error\u字符串(在/usr/lib64/libssl.so.1.0.1e中)
==3014==0x62BD653:???(in/usr/lib64/libmongoc-1.0.so.0.0.0)
==3014==0x62A2278:???(in/usr/lib64/libmongoc-1.0.so.0.0.0)
==3014==0x395BC0CE02:pthread_一次(在/lib64/libpthread-2.12.so中)
==3014==by 0x55add5:std::unique_ptr core::v1::make_unique(std::unique_ptr&)(in/usr/lib64/libmongocxx.so.3.0.3)
==3014==by 0x55ADAEE:mongocxx::v_noabi::instance::instance(std::unique_ptr)(in/usr/lib64/libmongocxx.so.3.0.3)
==3014==by 0x55ADCF4:mongocxx::v_noabi::instance::instance()(在/usr/lib64/libmongocxx.so.3.0.3中)
==3014==by 0x4F6188:main(main.c:280)
我怎样才能摆脱这个。
我在fork之后但在创建任何线程之前声明实例。

我的建议是,在验证以下内容之后,为该实例编写一个抑制:

  • 您是否验证了
    mongocxx::instance
    对象的dtor正在执行
  • 您是否已验证该对象的dtor实际上正在调用
    mongoc\u cleanup
如果这两个都是真的,那么您的下一个问题是询问libcrypto是否真的在任何路径下释放了分配的数据。如果答案是肯定的,那么你的下一个问题是问为什么它没有被呼叫。如果答案是“否”,那么你应该写一封信

在这里写一个抑制很可能是合适的,因为这几乎肯定是一次性分配,因此不与会导致无限内存增长的每操作上下文相关联


此外,请注意,内存实际上没有泄漏-它仍然可以访问。

我的建议是,在验证以下内容后,您可以为此编写一个抑制:

  • 您是否验证了
    mongocxx::instance
    对象的dtor正在执行
  • 您是否已验证该对象的dtor实际上正在调用
    mongoc\u cleanup
如果这两个都是真的,那么您的下一个问题是询问libcrypto是否真的在任何路径下释放了分配的数据。如果答案是肯定的,那么你的下一个问题是问为什么它没有被呼叫。如果答案是“否”,那么你应该写一封信

在这里写一个抑制很可能是合适的,因为这几乎肯定是一次性分配,因此不与会导致无限内存增长的每操作上下文相关联

此外,请注意,内存实际上并没有泄漏-它仍然是可访问的