wlanapi - WlanFreeMemory将释放其WLAN_INTERFACE_INFO数组结构吗?

时间:2016-03-24 11:49:34

标签: c++ windows winapi wlanapi

我在以下代码中使用Microsoft的WLAN API(我只留下了示例中的相关部分):

WLAN_INTERFACE_INFO_LIST structure

WLAN_INTERFACE_INFO structure

WlanEnumInterfaces() function

WlanFreeMemory() function

PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
WLAN_INTERFACE_INFO pIfInfo = NULL;
WlanEnumInterfaces(hClient, NULL, &pIfList); 
pIfInfo = pIntfList->InterfaceInfo[i];
WlanFreeMemory(pIfList);

我正在将活动界面(位于pIntfList->InterfaceInfo[i])保存到pIfInfo

WlanFreeMemory(pIfList)还会释放pIfInfo并使此变量无用吗?或者在执行pIfInfo = pIntfList->InterfaceInfo[i]时将其值复制到新结构?

有没有办法避免保留整个WLAN_INTERFACE_INFO结构变量而只保留PWLAN_INTERFACE_INFO

1 个答案:

答案 0 :(得分:1)

  

WlanFreeMemory(pIfList)还会释放pIfInfo并让这个变量无效吗?

没有。您的变量pIfInfo实际上是结构而不是指针。所以当你写

WLAN_INTERFACE_INFO pIfInfo = NULL;
WlanEnumInterfaces(hClient, NULL, &pIfList); 
pIfInfo = pIntfList->InterfaceInfo[i];

您正在获取结构的副本。请注意,代码无法编译,因为您无法将NULL分配给结构。另请注意,pIfInfo是一个糟糕的名称选择,因为它意味着读取变量是一个指针。

现在,对WlanFreeMemory(pIfList)的调用将释放所有已分配的内存,包括数组pIntfList->InterfaceInfo[]。但是,因为您获取了结构的副本,该数组的元素i的副本不会影响您。

我可能会写这样的代码:

PWLAN_INTERFACE_INFO_LIST pIfList;
if (WlanEnumInterfaces(hClient, NULL, &pIfList) != ERROR_SUCCESS)
{
    // handle error
}
WLAN_INTERFACE_INFO IfInfo = pIntfList->InterfaceInfo[i];
WlanFreeMemory(pIfList);
// can still use IfInfo, but not pIfList