【问题标题】:Does curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out); duplicate memory?curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out);重复记忆?
【发布时间】:2015-05-19 17:46:37
【问题描述】:

我用了很多次

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out); 

在我使用 curl_easy_cleanup() 函数清理之前的代码中。

CURL 是否会在他的环境中创建msg_out 的内存副本(动态内存)?

【问题讨论】:

  • 在文档中真的很难找到吗?

标签: c++ c curl libcurl


【解决方案1】:

不,它默认不做副本,这在CURLOPT_POSTFIELDS documentation中有说明:

指向的数据不会被库复制:因此,调用应用程序必须保留它,直到相关的传输完成。可以通过设置CURLOPT_COPYPOSTFIELDS 选项来更改此行为(因此 libcurl 会复制数据)。

【讨论】:

  • 所以正如我所料,你可以操纵行为,虽然 not 默认复制不是我所期望的。
【解决方案2】:

有或没有,无关紧要,只要在最后做curl_easy_cleanup()就可以了。

它很可能会复制帖子字段,因此在将它们传递给函数后free()它们是安全的,否则无法保证curl_easy_perform()的成功,如果我是一个curl库程序员我会复制它们,因为curl 句柄是一个不透明的结构,我不希望图书馆用户弄乱它,所以复制似乎是正确的选择。

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多