C++ 中通过GetAdaptersInfo获取网卡配置和Ip地址信息时内存释放问题

其实已经有很多帖子提到通过GetAdaptersInfo方法获取网卡信息,但是使用过程中发现有内存泄漏的问题。仔细看了下 IP_ADAPTER_INFO这个结构体,这其实是一个链表结构,一开始用递归的方法遍历所有节点删除,发现内存泄漏还是没有解决,然后继续看了他的成员变量,部分成员变量也是链表结构。

typedef struct _IP_ADAPTER_INFO {
    struct _IP_ADAPTER_INFO* Next;
    DWORD ComboIndex;
    char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
    UINT AddressLength;
    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
    DWORD Index;
    UINT Type;
    UINT DhcpEnabled;
    PIP_ADDR_STRING CurrentIpAddress; //链表结构,有next指针
    IP_ADDR_STRING IpAddressList;
    IP_ADDR_STRING GatewayList;
    IP_ADDR_STRING DhcpServer;
    BOOL HaveWins;
    IP_ADDR_STRING PrimaryWinsServer;
    IP_ADDR_STRING SecondaryWinsServer;
    time_t LeaseObtained;
    time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

如果需要遍历删除的话,那么还需要遍历这些成员变量,才能将所有内存都释放,考虑到申请内存的时候是一块连续的地址,因此用一个BYTE*的指针记住首地址,释放的时候直接调用delete []ptr;

//得到结构体大小,用于申请内存,及GetAdaptersInfo参数
	un
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值