OpenSSL::SSL_library_init()内存泄漏
OpenSSL::SSL_library_init() memory leak
最近我开始研究C++中的内存泄漏,所以我可能会问一些天真的问题
我有一个使用OpenSSL的c++库,我的任务是检查这个库中是否存在内存泄漏。我已经运行了视觉泄漏检测器来检查内存泄漏
我看到对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
调用而发生的
有人知道我还需要做什么才能释放所有内存泄漏吗?
要消除Joe H的答案中的编译错误:
sk_SSL_COMP_free(SSL_COMP_get_compression_methods());
据我所知,在SSL_library_init()
和SSL_load_error_strings()
期间分配的所有内存都存储在全局变量中,因此它属于"使用中的内存"类别,而不是内存泄漏类别,因为当程序耗尽时,内存仍然可以访问。
一个建议是,必须在使用SSL的每个线程中调用ERR_remove_state(0)
,因为当使用参数0调用ERR_remove_state
时,它只会清除当前线程的错误状态。其他电话对我来说似乎很好。如果你能发布VLD仍在显示的"两次泄漏",我可以检查一下。
要清除中分配的最后两个内存块SSL_library_int()尝试:
sk_free(SSL_COMP_get_compression_methods());
调用SSL_COMP_free_compression_methods();
。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏