内存泄漏使用libcurl C

时间:2014-07-08 13:36:40

标签: c memory-leaks libcurl

在我的C程序中,我尝试使用libcurl下载文件。我正在运行OS X 10.9.3并且我已将程序链接到libcurl.dylib。当我尝试下载文件时,一切正常,但内存泄漏,程序在使用libcurl时会不断占用更多内存。

我已经多次测试过了,我已经删除了其他代码部分,以发现libcurl是我程序漏洞的唯一部分。

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    size_t written;
    written = fwrite(ptr, size, nmemb, stream);
    return written;
 }

/* Function leaks memory! */
void download_file(char* url, char* filename){
    struct passwd *pw = getpwuid(getuid());
    const char *homedir = pw->pw_dir;
    char filePath[FILENAME_MAX];

    strcpy(filePath, homedir);
    strcat(filePath, "/");
    strcat(filePath, filename);
    FILE *fp;
    CURL *curl;
    curl = curl_easy_init();
    if(curl){
        remove(filePath);
        fp = fopen(filePath, "wb");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        curl_global_cleanup(); // Tried to add this.
        fclose(fp);
    }

}

不幸的是,没有其他方法可以下载文件(除非我重写HTTP协议)并且我的代码可以移植到Linux和Mac系统。

0 个答案:

没有答案