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.
我用了很多次
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.