2
#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.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

このメモリリークの原因は何ですか?

4

1 に答える 1

3

遅い答えですが、私は同じ問題に遭遇しました。libcurl が openssl サポートとリンクされている場合は、openssl リソースを手動で解放する必要があります。

#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()); 

私のためにトリックをしました

于 2015-11-27T13:45:42.163 に答える