调试信息:运行时检查失败#2-变量'IpNetRow2'周围的堆栈已损坏

时间:2019-05-01 19:03:27

标签: c

我一直在尝试使用 GetIpNetEntry2 ResolveIpNetEntry2 函数从Windows 10(Enterprise 1803)上的Visual Studio 2017(SDK 8.1)中的IPv4获取MAC地址。我得到了:

  

运行时检查失败#2-变量'IpNetRow2'周围的堆栈已损坏。

通过以下功能结束:

static int GetMacAddress(SOCKADDR_IN ClientAddr)
{
    MIB_IPNET_ROW2 IpNetRow2 = { 0 };
    DWORD dwBestIfIndex = 0;
    int nRet = -1;

    // Retrieves the index of the interface that has the best route to the client IP address.
    GetBestInterface(inet_addr(inet_ntoa(ClientAddr.sin_addr)), &dwBestIfIndex);
    // Finds MAC address from the local computer
    IpNetRow2.InterfaceIndex = dwBestIfIndex;
    IpNetRow2.Address.si_family = AF_INET;
    IpNetRow2.Address.Ipv4.sin_addr.s_addr = ClientAddr.sin_addr.S_un.S_addr;

    nRet = GetIpNetEntry2(&IpNetRow2);
    if (nRet != NO_ERROR)
    {
        // Could not find the MAC address in the cache, lets hit the wire.
        nRet = ResolveIpNetEntry2(&IpNetRow2, NULL);
    }

    return nRet;
}

返回的结果在nRet = 0和dwBestIfIndex = 22时有效。 我已尽力寻找有关如何诊断问题的描述;但是我没有找到任何相关的解决方案。代码是如此简单,我对代码的哪一部分会导致此类问题有所了解。

1 个答案:

答案 0 :(得分:0)

谢谢大家的帮助。对此,我真的非常感激。最终我明白了。这不是代码问题,而是配置问题。 Struct成员对齐(Visual Studio项目属性-> C / C ++->代码生成)设置为1个字节,这引起了问题。我将其更改回“默认”,然后异常消失了。吸取了教训。谢谢。