VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1017|回复: 1

[交流] 根据ip获取MAC地址, 报错内存泄漏, 求帮忙看看

[复制链接]
59_avatar_middle
最佳答案
0 
在线会员 发表于 2020-11-19 16:44:14 | 显示全部楼层 |阅读模式
在申请后马上释放不会报内存泄漏,但是在最后释放时,有内存泄漏,
环境: vs2017

求大佬帮忙看看.
代码如下:

#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库

void CTestRegeditOperationDlg::OnBnClickedButton5()
{
        // TODO: 在此添加控件通知处理程序代码
        PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
        BOOL isArrayApply = FALSE;
        unsigned long stSize = sizeof(IP_ADAPTER_INFO);
        int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
        if (ERROR_BUFFER_OVERFLOW == nRel)
        {
                isArrayApply = TRUE;
                delete pIpAdapterInfo;
                pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
                memset(pIpAdapterInfo, NULL, stSize);
                nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
                //delete[]pIpAdapterInfo;
        }


        if (ERROR_SUCCESS == nRel) {
                while (pIpAdapterInfo != nullptr)
                {
                        //根据描述过滤
                        //"wmware" "virtualbox"
                        char szDesc[MAX_PATH] = { 0 };
                        strcpy(szDesc, pIpAdapterInfo->Description);
                        _strlwr(szDesc);

                        if (strstr(szDesc, "vmware") != NULL || strstr(szDesc, "virtualbox") != NULL ||
                                strstr(szDesc, "VPN") != NULL || strstr(szDesc, "VMware") != NULL || strstr(szDesc, "Virtualbox") != NULL ||
                                strstr(szDesc, "VMnet") != NULL) {
                                pIpAdapterInfo = pIpAdapterInfo->Next;
                                continue;
                        }

                        //根据网卡类型过滤:网卡类型:MIB_IF_TYPE_ETHERNET:有线网卡 IF_TYPE_IEEE80211:无线网卡
                        if (pIpAdapterInfo->Type != MIB_IF_TYPE_ETHERNET && pIpAdapterInfo->Type != IF_TYPE_IEEE80211)
                        {
                                pIpAdapterInfo = pIpAdapterInfo->Next;
                                continue;
                        }



                        //可能网卡有多IP,因此通过循环去判断
                        IP_ADDR_STRING *pIpAddrString = &(pIpAdapterInfo->IpAddressList);
                        CString csIpString;
                        do {
                                csIpString = pIpAddrString->IpAddress.String;
                                if (strcmp("192.168.80.153", csIpString.GetBuffer(100)) == 0) {
                                        char szMac[MAX_PATH] = { 0 };
                                        for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
                                        {
                                                if (i < pIpAdapterInfo->AddressLength - 1)
                                                {
                                                        char szItem[MAX_PATH] = { 0 };
                                                        sprintf(szItem, "%02X:", pIpAdapterInfo->Address[i]);
                                                        strcat(szMac, szItem);
                                                }
                                                else
                                                {
                                                        char szItem[MAX_PATH] = { 0 };
                                                        sprintf(szItem, "%02X\n", pIpAdapterInfo->Address[i]);
                                                        strcat(szMac, szItem);
                                                }
                                        }
                                        MessageBox(szMac);
                                        /*break;*/
                                }
                               
                                pIpAddrString = pIpAddrString->Next;
                        } while (pIpAddrString != nullptr);


                        pIpAdapterInfo = pIpAdapterInfo->Next;
                }
        }
        else {
                MessageBox("获取网卡信息失败!");
        }


        if (isArrayApply) {
                delete[]pIpAdapterInfo;
        }
        else
        {
                delete pIpAdapterInfo;
        }
}




上一篇:这是我的题目,谁能救救我 可视化程序设计
下一篇:vs2017 创建的mfc工程不能添加ATL类了吗?
59_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-11-19 17:43:44 | 显示全部楼层

jietu

本帖最后由 yangli 于 2020-11-19 17:45 编辑

jieturuxia
1.png
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-12-3 19:09

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表