微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Curl_open内存泄漏

如何解决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 举报,一经查实,本站将立刻删除。