我正在使用我在这里找到的一个函数通过 cURL 将网页保存到内存中:
struct WebpageData {
char *pageData;
size_t size;
};
size_t storePage(void *input, size_t size, size_t nmemb, void *output) {
size_t realsize = size * nmemb;
struct WebpageData *page = (struct WebpageData *)output;
page->pageData = (char *)realloc(page->pageData, page->size + realsize + 1);
if(page->pageData) {
memcpy(&(page->pageData[page->size]), input, realsize);
page->size += realsize;
page->pageData[page->size] = 0;
}
return realsize;
}
并找到该行:
page->pageData = (char *)realloc(page->pageData, page->size + realsize + 1);
导致每次调用几百字节的内存泄漏。我对原始来源所做的唯一真正改变是将有问题的行转换为(char *),我的编译器(gcc,g++,特别是如果它是 ac/c++ 问题,但 gcc 也不会用 uncast 编译)声明)坚持,但我认为这是泄漏的根源。谁能解释一下?
谢谢