C ++

最近我开始研究C ++中的内存泄漏问题,所以我可能会问一个天真的问题。
我有一个使用OpenSSL的c ++库 - 我的任务是检查这个库中是否有内存泄漏。 我运行了Visual Leak Detector来检查内存泄漏。
我看到对SSL_library_init();的调用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调用而发生SSL_library_init
有谁知道还有什么我必须做的,以释放所有的内存泄漏?


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

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


要摆脱SSL_library_init()中分配的最后两个内存块,请尝试:

sk_free(SSL_COMP_get_compression_methods());

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

sk_SSL_COMP_free(SSL_COMP_get_compression_methods());
链接地址: http://www.djcxy.com/p/57045.html

上一篇: c++

下一篇: Detect unmanaged memory leak in a managed application