curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out);重复记忆?

Does curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out); duplicate memory?

我用了很多次

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out); 

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

CURL 是否在他的环境中制作 msg_out 的内存副本(动态内存)?

做不做无关紧要,最后做curl_easy_cleanup()就好了。

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

不,它默认不复制,这在CURLOPT_POSTFIELDS documentation:

中有说明

The data pointed to is NOT copied by the library: as a consequence, it must be preserved by the calling application until the associated transfer finishes. This behaviour can be changed (so libcurl does copy the data) by setting the CURLOPT_COPYPOSTFIELDS option.