RRR*_*RRR 14 c++ windows openssl memory-leaks
最近我开始研究C++中的内存泄漏问题,所以我可能会问一些天真的问题.
我有一个使用OpenSSL的c ++库 - 我的任务是检查此lib中是否存在内存泄漏.我运行Visual Leak Detector来检查内存泄漏.
我看到调用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();
Run Code Online (Sandbox Code Playgroud)
泄漏确实减少了,但仍有两次泄漏(VLD工具显示我)因为SSL_library_init呼叫而发生.
有谁知道我还要做什么才能解除所有内存泄漏?
要消除Joe H的回答中的编译错误:
sk_SSL_COMP_free(SSL_COMP_get_compression_methods());
Run Code Online (Sandbox Code Playgroud)
据我了解所有在全局变量期间分配SSL_library_init()并SSL_load_error_strings()存储在全局变量中的内存,因此它属于"使用中的内存"类别,而不属于内存泄漏类别,因为当程序消失时仍可访问内存.
一个建议是ERR_remove_state(0)必须在使用SSL的每个线程中调用,因为当您调用ERR_remove_statewith参数0时,它只是清除当前线程的错误状态.其他电话对我来说很好.如果您可以发布仍然由VLD显示的"两个泄漏",我可以检查.
小智 6
要摆脱SSL_library_init()中分配的最后两个内存块,请尝试:
sk_free(SSL_COMP_get_compression_methods());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10862 次 |
| 最近记录: |