首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wlanapi - WlanFreeMemory会释放它的WLAN_INTERFACE_INFO数组结构吗?

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

Stack Overflow用户
提问于 2016-03-24 11:49:34
回答 1查看 201关注 0票数 0

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

structure

structure

function

function

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-24 12:00:00

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

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

代码语言:javascript
复制
WLAN_INTERFACE_INFO pIfInfo = NULL;
WlanEnumInterfaces(hClient, NULL, &pIfList); 
pIfInfo = pIntfList->InterfaceInfo[i];

你拿了一份结构体的副本。请注意,由于不能将NULL分配给结构,所以代码不编译。还请注意,pIfInfo是一个糟糕的名称选择,因为它暗示读取变量是一个指针。

现在,对WlanFreeMemory(pIfList)的调用将释放所有分配的内存,包括数组pIntfList->InterfaceInfo[]。但是,由于您接受了结构的副本,即数组的元素i的副本,所以这不会影响您。

我可能会这样写你的代码:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36199484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档