wlanapi — освободит ли WlanFreeMemory свою структуру массива WLAN_INTERFACE_INFO?

Я использую WLAN API от Microsoft в следующем коде (я оставил только соответствующие части из примера):

WLAN_INTERFACE_INFO_LIST состав

WLAN_INTERFACE_INFO состав

WlanEnumInterfaces() функция

WlanFreeMemory() функция

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?

0

Решение

Будет 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 pIfList
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]