如何解决Curl_open内存泄漏
在我的应用程序中,我看到valgrind中的这些泄漏是卷曲的。我的应用在启动过程中初始化了4个curl句柄,并使用它们来下载数据,然后使用curl_easy_reset重置了该handle。可以在应用程序出口通过curl_easy_cleanup清理这些句柄。
我认为此流程是正确的,不应有任何泄漏,但valgrind显示以下泄漏
== 3238 == 4块中的229,504(直接77,056,间接152,448)个字节肯定在7,506的丢失记录中丢失7,506 == 3238 ==在0x48411F8:calloc(vg_replace_malloc.c:752) == 3238 ==通过0x52AA09B:Curl_open(在/usr/lib/libcurl.so.4.5.0中)
== 3238 == 2块中的74,974(352直接,74,622间接)字节肯定在7,506 == 3238 ==在0x4841478:重新分配(vg_replace_malloc.c:826) == 3238 ==通过0x5A68ABF:ares_init_options(在/usr/lib/libcares.so.2.3.0中)
从curl_easy_init(4次调用)和额外的curl_easy_init(由curl_easy_perform调用)中调用Curl_open,但是curl_easy_cleanup仅被调用4次。从curl_easy_perform进行的额外curl_easy_init调用是否与泄漏有关?下面是伪代码
void init()
{
for (i=0; i<8; i++)
{
curlHandles[i].curlhandle = curl_easy_init();
curlHandles[i].isInUse = FALSE;
}
}
void deinit()
{
for (i=0; i<8; i++)
{
curlHandles[i].curlhandle = curl_easy_cleanup();
curlHandles[i].isInUse = FALSE;
}
}
void download()
{
lock()
curl_handle = get_free_handle()
unlock()
/* set curl opts */
curl_easy_setopt();
/* perform download */
curl_easy_perform();
/* reset */
curl_easy_reset(curl_handle);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。