Max*_*Max 4 c valgrind memory-leaks libcurl
在我的C程序中,我使用了libcurl的一些基本功能.今天我跑了valgrind,以检查我是否有内存泄漏,valgrind疯狂报告多个错误.
我跟踪它基本上是:
CURL *curl;
CURLcode res;
curl = curl_easy_init();
// ...
curl_easy_cleanup(curl);
Run Code Online (Sandbox Code Playgroud)
如果我完全删除使用libcurl的代码,valgrind不会报告任何错误.
我已经读过使用valgrind与libcurl和ssl有一些问题,但是我不提取任何https网址等.
我能做什么?我可以让valgrind关闭libcurl错误(可能是误报吗?)并仅报告我的代码中的错误?尽管libcurl的使用最简单,但由于存在大量错误,因此valgrind的输出非常混乱.
不幸的是我没有安装libcurl构建的调试,所以valgrind甚至不报告它检测到泄漏的行号/文件.错误消息如下所示:
==27330==
==27330== HEAP SUMMARY:
==27330== in use at exit: 34,960 bytes in 2,406 blocks
==27330== total heap usage: 20,130 allocs, 17,724 frees, 2,511,576 bytes allocated
==27330==
==27330== 40 (20 direct, 20 indirect) bytes in 1 blocks are definitely lost in loss record 383 of 445
==27330== at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==27330== by 0x4B173FD: ???
==27330== by 0x4B17A8B: ???
==27330== by 0x4B84957: ???
==27330== by 0x4B849FD: ???
==27330== by 0x4B72814: ???
==27330== by 0x4B734C1: ???
==27330== by 0x4B78DE2: ???
==27330== by 0x4B7524B: ???
==27330== by 0x49B2F76: ???
==27330== by 0x49C9ECB: ???
==27330== by 0x49BC96A: ???
...
Run Code Online (Sandbox Code Playgroud)
小智 6
我知道这个答案将在一年后出现,但有人可能仍然觉得它很有帮助.
通话结束后curl_easy_cleanup(curl),尝试添加呼叫curl_global_cleanup().
这对我有用.
如果您从第一个libcurl示例(simple.c)开始,它们不会调用curl_global_init(long flags),curl_global_cleanup()最后,valgrind将报告潜在的问题.正如libcurl文档中所述,你必须调用BOTH curl_global_init和curl_global_cleanup.我证实了自己解决了这个问题; valgrind将报告所有堆块都被释放.
您实际上遇到了什么错误?
同样重要的是,泄漏量是静态的还是会随着时间的推移而增加?一次小的静态泄漏远不如随着时间的推移而泄漏的泄漏重要。
这也有可能是 Valgrind 的误报;取决于具体的错误以及您在哪里看到它们。