Информация об отладке: Ошибка проверки во время выполнения # 2 - стек вокруг переменной 'IpNetRow2' поврежден - PullRequest
0 голосов
/ 01 мая 2019

Я пытался использовать функции GetIpNetEntry2 и ResolveIpNetEntry2 для получения MAC-адреса из IPv4 в Visual Studio 2017 (SDK 8.1) в Windows 10 (Enterprise 1803). Я получаю:

Ошибка проверки времени выполнения # 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 голосов
/ 02 мая 2019

Спасибо всем за помощь. Я очень ценю это. В конце концов я понял это. Это не проблема кода, а проблема конфигурации. Выравнивание элементов Struct (Свойство проекта Visual Studio -> C / C ++ -> Генерация кода) было установлено на 1 байт, что вызвало проблему. Я изменил его обратно на «По умолчанию», тогда исключение пропало Выучил урок. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...