【发布时间】:2012-07-30 09:03:25
【问题描述】:
最近我开始研究 C++ 中的内存泄漏,所以我可能会问一个幼稚的问题。
我有一个使用 OpenSSL 的 c++ 库——我的任务是检查这个库中是否存在内存泄漏。我已运行 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();
泄漏确实减少了,但仍然有两个泄漏(VLD 工具向我显示)是因为SSL_library_init 调用而发生的。
有谁知道我还需要做什么才能释放所有内存泄漏?
【问题讨论】:
-
我不推荐 EVP_cleanup() 和 CRYPTO_cleanup_all_ex_data()。如果应用程序中使用了多个库,比如说 libssh2,我们不知道什么时候会调用它,这将卸载所有表并清理所有全局数据。考虑到这个问题,其中一个开源库 open Pegasus 实现了这一点,这导致我们的应用程序崩溃。这个开放的 pegasus 库在使用完成后会清除 openssl 的所有表和全局数据。由于清理,其他线程中的其他库在中间失败了。
-
在正确的地方使用它很重要
标签: c++ windows memory-leaks openssl