我在以下代码中使用了 Microsoft 的 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]
中的事件接口(interface)保存到 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
关于c++ - wlanapi - WlanFreeMemory 会释放它的 WLAN_INTERFACE_INFO 数组结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36199484/