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

时间:2015-05-19 17:46:37

标签: c++ c curl libcurl

我多次使用

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, msg_out); 
在使用curl_easy_cleanup()函数进行清理之前,在我的代码中

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

2 个答案:

答案 0 :(得分:3)

不,默认情况下它不会制作副本,这在CURLOPT_POSTFIELDS documentation中说明:

  

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

答案 1 :(得分:0)

如果不这样做,则无关紧要,最后只做curl_easy_cleanup(),这应该是好的。

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