场景
调用libcurl实现http通信,实现一个类去完成该功能,libcurl实现主要是如下流程
easy_init 初始化
setopt 设参数
perform传输
curl_cleanup 销毁空间
这里一开始出现的错误是double free or corruption
仔细检查后,发现有这句 CURL *curl,这是使用libcurl时实例化的对象,之后都是使用该对象去完成所有功能。
问题就出在我把这句写在了构造函数中,而在之后的send成员函数(该函数就是发送数据)中我每次调用都用了cleanup,所以在调用一次后,send就会把这个对象释放,再次调用时,这个实例化的curl对象就不存在了!所以下次send时就会找不到该对象。
解决办法
CURL curl;
…
…//这里是传输时的各种操作,包括设置传输参数,以及传输perform
curl_easy_cleanup
然后在这之后加一个
curl = NULL;//保证curl依然存在,只是值为NULL