#include <curl/curl.h>
#include <mcheck.h>
int main(int argc, char** argv)
{
setenv("MALLOC_TRACE", "output", 1);
mtrace();
curl_global_init(CURL_GLOBAL_ALL);
curl_global_cleanup();
return 0;
}
gcc -o test test.c -lcurl
./测试
mtrace输出
- 0x000000000154f010 Free 6293 was never alloc'd 0x7f9a4e515256
- 0x000000000154f040 Free 6294 was never alloc'd 0x7f9a4e4a299d
- 0x000000000154f060 Free 6295 was never alloc'd 0x7f9a4e51540c
Memory not freed:
Address Size Caller
0x000000000154f830 0x258 at 0x7f9a4d303134
0x000000000154fa90 0xb0 at 0x7f9a4d303134
0x000000000154fb50 0x80 at 0x7f9a4d303134
0x000000000154fbe0 0x18 at 0x7f9a4d303134
0x0000000001568ca0 0x20 at 0x7f9a4d303134
0x0000000001568cd0 0x20 at 0x7f9a4d303134
什么可能导致此内存泄漏?
答案 0 :(得分:1)
迟到的答案,但我自己也遇到了同样的问题。 如果libcurl与openssl支持链接,则必须手动释放openssl ressource。
#include "openssl/conf.h"
#include "openssl/err.h"
#include "openssl/engine.h"
#include "openssl\ssl.h"
CONF_modules_free();
ERR_remove_state(0);
ENGINE_cleanup();
CONF_modules_unload(1);
ERR_free_strings();
EVP_cleanup();
CRYPTO_cleanup_all_ex_data();
sk_SSL_COMP_free(SSL_COMP_get_compression_methods());
我的诀窍