我在下面的代码中使用了Microsoft的WLAN API (我只留下了示例中的相关部分):
PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
WLAN_INTERFACE_INFO pIfInfo = NULL;
WlanEnumInterfaces(hClient, NULL, &pIfList);
pIfInfo = pIntfList->InterfaceInfo[i];
WlanFreeMemory(pIfList);我将位于pIntfList->InterfaceInfo[i]中的active接口保存到pIfInfo中。
WlanFreeMemory(pIfList)也会释放pIfInfo并让这个变量失效吗?或者在执行pIfInfo = pIntfList->InterfaceInfo[i]时将其值复制到新结构中。
有没有办法避免保留整个WLAN_INTERFACE_INFO struct变量而只保留一个PWLAN_INTERFACE_INFO
发布于 2016-03-24 12:00:00
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 pIfListhttps://stackoverflow.com/questions/36199484
复制相似问题