我用 C 语言编写了一个函数,用于处理来自 cURL 的 write 回调。
static size_t writecallback(char* contents, size_t size, size_t nmemb, char** stream) {
size_t csize=size*nmemb;
size_t psize = strlen(*stream);
size_t tsize = csize+ psize;
*stream = (char*)realloc(*stream, tsize+1);
memcpy(*stream + psize, contents,csize);
(*stream)[tsize] = '\0';
return csize;
}
我不知道如何正确地用C编写,我在这里失去了记忆。我使用 valgrind 来检查内存泄漏,报告消息看起来像这样:
906 bytes in 1 blocks are definitely lost in loss record 859 of 931
at 0x4848B80: realloc (vg_replace_malloc.c:1690)
我尝试使用chatgpt,但它对我没有多大帮助。
使用该功能,我可以执行此操作(可重现的示例):
char* request(){
CURL* curl=curl_easy_init();
struct curl_slist* header=NULL;
char* output=malloc(1);
output[0]='\0';
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writecallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &output);
CURLcode res = curl_easy_perform(curl);
if(res!=CURLE_OK){
printf("Failed performing actions,\n%s\n",
curl_easy_strerror(res));
}
return output;
}
const char* out=request();
//forward logic here
抱歉,我真的不知道如何编写可重现的示例。
在这里做什么? 我做错了什么? 你能告诉我我做错了什么吗?这样下次我就知道了? 感谢您的阅读。
您需要释放您分配的内存。你失踪了
free( out );
。