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

标签 c++ windows winapi wlanapi

我在以下代码中使用了 Microsoft 的 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] 中的事件接口(interface)保存到 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

关于c++ - wlanapi - WlanFreeMemory 会释放它的 WLAN_INTERFACE_INFO 数组结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36199484/

相关文章:

c++ - 彩票中奖概率 C++

c++ - 如何在 c++ "XY:56:21AM"中从这个字符串中分离出 HH、MM、SS 和 merdian?以下程序出现段错误

c++ - 在自己的轴上旋转

windows - 如何批量重命名包含数字和修改日期的文件?

c++ - 是否可以锁定应用程序中常用控件使用的内存?

在 Windows : memory leak? 上重复数百次后 C++ 屏幕捕获失败

c++ - 不能使用公共(public)嵌套类作为私有(private)方法参数

c - 在单个 udp 服务器中处理 40 个客户端的可能算法

c# - 授权 USB 驱动器

c++ - 在 C++ Win32 中获取计算机上的用户配置文件列表