同时调用pcap_close与fclose触发Double free问题的原因咨询
Double Free错误原因解释
首先看触发问题的代码:
FILE* file = fopen(some file); pcap_t* pd = pcap_fopen_offline(file); pcap_close(pd); fclose(file);
问题核心原因
你猜测的方向完全正确,pcap_fopen_offline会接管传入的FILE*指针:
- 调用
pcap_fopen_offline创建pcap_t句柄时,libpcap会将传入的FILE*与这个句柄绑定,接管文件资源的管理权 - 执行
pcap_close(pd)销毁句柄时,libpcap内部会自动调用fclose关闭关联的FILE*指针 - 之后手动调用
fclose(file),等于对同一个文件指针执行了两次释放操作,直接触发Double free错误
解决建议
- 方案一:调用
pcap_close后,不要再手动调用fclose(file),交给libpcap负责资源清理 - 方案二:如果需要自行控制文件的打开和关闭,改用
pcap_open_offline函数直接传入文件名,而非提前打开的FILE*指针
内容的提问来源于stack exchange,提问作者KS_No
相关产品推荐
相关产品推荐

