最近一个例子调试很久才找到问题。
情况是这样的
A函数里先调用B函数,再调用C函数。
C函数要用到curl openssl版的,在C函数开始部分curl_global_init(CURL_GLOBAL_ALL); 全局初始化,在结尾部分curl_global_cleanup();全局释放。
假如B函数也用到了openssl。这个A函数如果在main函数里执行一遍是没有问题的。如果在主函数里执行两遍以上A函数,问题就会出现了。最后查找原因是因为curl_global_cleanup();把openssl给释放了。造成第二次执行A再执行B的时候B出问题了,间接造成B出问题。
结论:curl_global_init(CURL_GLOBAL_ALL); 一定要放在主程序开头。curl_global_cleanup();函数一定要放在主程序结尾