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++