gpt4 book ai didi

c++ - GetAdaptersInfo 崩溃

转载 作者:太空狗 更新时间:2023-10-29 20:35:37 24 4
gpt4 key购买 nike

我目前正在尝试为我的一个 friend 生成一些硬件,我注意到 GetAdaptersInfo 的行为有点奇怪。根据MSDN pOutBufLen 应指向一个变量,其中包含 sizeof(IP_ADAPTER_INFO) (640) 的值。但是,当我使用该值时,它返回 111 (ERROR_BUFFER_OVERFLOW) 并将 outBufLen 设置为 2560。当调用 outBufLen 设置为 2560 的函数时,它只会崩溃。

最小复制代码:

#include <windows.h>
#include <Iphlpapi.h>

int main()
{
IP_ADAPTER_INFO adapter_inf;
unsigned long int outBufLen = sizeof(IP_ADAPTER_INFO);

GetAdaptersInfo(nullptr, &outBufLen); // returning 111 (ERROR_BUFFER_OVERFLOW) and setting outBufLen to 2560
GetAdaptersInfo(&adapter_inf, &outBufLen); // crash during this call

return 0;
}

不知道这是否重要,但这里是 64 位 Windows 8。

最佳答案

GetAdaptersInfo(nullptr, &outBufLen);

outBufLen 中返回一个值后,您需要在后续调用中传递该长度的缓冲区。您不这样做,因此会出现运行时错误。

您需要使用 outBufLen 中返回的长度动态分配 pAdapterInfo

ULONG outBufLen = 0;
if (GetAdaptersInfo(nullptr, &outBufLen) != ERROR_BUFFER_OVERFLOW)
// handle error
PIP_ADAPTER_INFO pAdapterInfo = (PIP_ADAPTER_INFO) malloc(outBufLen);
if (GetAdaptersInfo(pAdapterInfo, &outBufLen) != ERROR_SUCCESS)
// handle error

我在这里使用了 malloc 和 C 风格的转换,但您可能更喜欢使用 new 和 C++ 风格的转换。我这样做并不是因为我自己不熟悉。

显然,当您使用完内存后,您需要释放内存。

关于c++ - GetAdaptersInfo 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41944916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com