You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用libpcap的pcap_findalldevs接口后出现内存泄漏是什么原因?

问题原因

你遍历设备链表时直接修改了pcap_findalldevs输出的链表头指针,遍历完成后该指针已经被移动到链表末尾变为NULL,此时传入pcap_freealldevs的参数是空指针,无法完成内存释放操作,因此出现内存泄漏。

修正方案

你需要额外定义一个变量保存链表头的原始地址,遍历的时候用临时指针操作,遍历完成后将原始链表头传入释放接口即可。

修正后的完整代码如下:

#include <pcap.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char errbuf[PCAP_ERRBUF_SIZE] = {0};
    pcap_if_t *dev_list = NULL;
    pcap_if_t *it = NULL;

    if(pcap_findalldevs(&dev_list, errbuf) == 0) {
        it = dev_list;
        while (it) {
            printf("%s - %s\n", it->name, it->description);
            it = it->next;
        }
        // 传入原始链表头释放整个列表
        pcap_freealldevs(dev_list);
    }
    else {
        printf("error: %s\n", errbuf);
        exit(-1);
    }

    return 0;
}

修改完成后重新编译运行,valgrind就不会再检测到该内存泄漏问题。

内容的提问来源于stack exchange,提问作者mchen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 06:24:04