在我的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系统。