OpenSSL :: SSL_library_init()内存泄漏

时间:2012-08-01 12:53:45

标签: c++ windows memory-leaks openssl

最近我开始研究C ++中的内存泄漏,所以我可能会问一些天真的问题 我有一个使用OpenSSL的c ++库 - 我的任务是检查此lib中是否存在内存泄漏。我运行了Visual Leak Detector来检查内存泄漏 我看到对SSL_library_init();SSL_load_error_strings();的调用正在引发泄密 - 快速的Google搜索显示在使用结束时我必须调用以下内容:

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呼叫而发生。 有谁知道我还需要做些什么来解除所有内存泄漏?

4 个答案:

答案 0 :(得分:7)

在Joe H的回答中摆脱编译错误:

sk_SSL_COMP_free(SSL_COMP_get_compression_methods());

答案 1 :(得分:6)

去掉最后分配的两个内存块     SSL_library_init() 尝试:

sk_free(SSL_COMP_get_compression_methods());

答案 2 :(得分:5)

据我所知,在SSL_library_init()SSL_load_error_strings()期间分配的所有内存都存储在全局变量中,因此它属于“使用中的内存”类别,而不属于内存泄漏类别当程序消失时,仍然可以访问内存。

一个建议是必须在使用SSL的每个线程中调用ERR_remove_state(0),因为当您使用参数0调用ERR_remove_state时,它只会清除当前线程的错误状态。其他电话对我来说很好。如果您可以发布仍然由VLD显示的“两次泄密”,我可以查看。

答案 3 :(得分:3)

致电SSL_COMP_free_compression_methods();