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