wlanapi - WlanFreeMemory 会释放它的 WLAN_INTERFACE_INFO 数组结构吗?
wlanapi - will WlanFreeMemory free its WLAN_INTERFACE_INFO array struct?
我在下面的代码中使用了微软的 WLAN API(我只留下了示例中的相关部分):
WLAN_INTERFACE_INFO_LIST
structure
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
我在下面的代码中使用了微软的 WLAN API(我只留下了示例中的相关部分):
WLAN_INTERFACE_INFO_LIST
structure
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 freepIfInfo
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