ここで見つけた関数を使用して、cURLを使用してWebページをメモリに保存しています。
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もキャストされていない状態ではコンパイルされません。ステートメント)が主張しましたが、これがリークの原因であると思います。誰でも解明できますか?
ありがとう