wlanapi - WlanFreeMemory 会释放它的 WLAN_INTERFACE_INFO 数组结构吗?

wlanapi - will WlanFreeMemory free its WLAN_INTERFACE_INFO array struct?

我在下面的代码中使用了微软的 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

Will WlanFreeMemory(pIfList) also free pIfInfo and leave this variable useless?

没有。您的变量 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