|
在申请后马上释放不会报内存泄漏,但是在最后释放时,有内存泄漏,
环境: 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类了吗?
|