我的程序使用libpcap,如下所示:
而pcaket = pcap_next(){
... (modify the pcaket and do checksum) ... pcap_sendpacket(pcaket)
}
最近,我发现程序中存在内存泄漏......
我的问题是: libpcap会在pcap_next之后释放pcaket吗?或者我必须自己做免费工作?
答案 0 :(得分:3)
libpcap会在pcap_next之后释放pcaket吗?
数据包包含在libpcap内部的缓冲区中(附加到pcap_t
);没有为每个数据包分配新的缓冲区,因此缓冲区在pcap_next()
之后不会被释放,它会在pcap_t
关闭后释放。你不必自己释放它。
(这也意味着来自pcap_next()
或pcap_next_ex()
的特定来电的分组数据不保证在下次调用pcap_next()
后仍然有效或pcap_next_ex()
- 或pcap_loop()
或pcap_dispatch()
;它可能会被下一个数据包或下一批数据包中的数据覆盖。)