OpenSSL的:: SSL_library_init()内存泄漏(OpenSSL::SSL_lib

2019-06-26 16:05发布

最近我开始研究关于C ++内存泄漏,所以我可能会问一个幼稚的问题。
我有一个使用OpenSSL一个C ++库 - 我的任务是检查是否有这个LIB内存泄漏。 我已经运行Visual检漏仪检查MEM泄漏。
我看到,在两个电话SSL_library_init();SSL_load_error_strings(); 是领先的泄漏 - 快速谷歌搜索是显示,在使用结束时,我必须调用如下:

CONF_modules_free();
ERR_remove_state(0);
ENGINE_cleanup();
CONF_modules_unload(1);
ERR_free_strings();
EVP_cleanup();
CRYPTO_cleanup_all_ex_data();

泄漏确实有所下降,但仍然有两个泄漏(该VLD工具显示我)发生,因为SSL_library_init电话。
没有人知道还有什么我必须以释放所有MEM泄漏怎么办?

Answer 1:

据我了解所有这期间分配的内存SSL_library_init()SSL_load_error_strings()存储在全局变量,因此它涉及的“使用的内存”类别下,而在内存泄漏的类别作为内存仍然可以访问时程序正在消亡。

一个建议是, ERR_remove_state(0)必须在使用SSL,因为当你调用每个线程调用ERR_remove_state与参数0,它只是清除当前线程的错误状态。 其他调用似乎对我好。 如果你能后,“两个漏”,其仍然被VLD显示,我可以检查。



Answer 2:

在乔轰的答案摆脱编译错误:

sk_SSL_COMP_free(SSL_COMP_get_compression_methods());


Answer 3:

为了摆脱SSL_library_init分配的最后两个内存块()尝试:

sk_free(SSL_COMP_get_compression_methods());


Answer 4:

呼叫SSL_COMP_free_compression_methods();



文章来源: OpenSSL::SSL_library_init() memory leak