这里的记忆肯定在哪里丢失了?

问题描述 投票:0回答:1

我用 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

抱歉,我真的不知道如何编写可重现的示例。

在这里做什么? 我做错了什么? 你能告诉我我做错了什么吗?这样下次我就知道了? 感谢您的阅读。

c memory-management memory-leaks
1个回答
0
投票

您需要释放您分配的内存。你失踪了

free( out );

© www.soinside.com 2019 - 2024. All rights reserved.