2

我的程序像这样使用 libpcap:

而 pcaket = pcap_next() {

...

(modify the pcaket and do checksum)

...

pcap_sendpacket(pcaket) 

}

最近,我发现我的程序中存在内存泄漏......

我的问题是: libpcap 会在 pcap_next 之后释放 pcaket 吗?还是我必须自己做免费工作?

4

1 回答 1

3

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();它可能会被下一个数据包或下一批数据包的数据覆盖。)

于 2013-01-24T20:58:08.733 回答