Segmentation fault при разыменовании struct sockaddr_in*

Имеется следующий код:

struct sockaddr_in m_destAddr;
std::string ipAddrString = "127.0.0.1"
struct addrinfo hints, *res;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_RAW;
hints.ai_protocol = IPPROTO_ICMP;
if (getaddrinfo(ipAddrString.c_str(), NULL, &hints, &res) != 0)
{
    m_errorText = "Failed to resolve IP address";
    m_errorCode = 4;
    return;
}
m_destAddr = *(struct sockaddr_in*)res->ai_addr;

На последней строке происходит ошибка сегментации. Немного поисследовав, пришел к выводу, что это происходит при попытке разыменования res->ai_addr. Я проверил, res и res->ai_addr не являются nullptr.

Я написал следующий уточняющий код:

struct sockaddr* address = res->ai_addr;
struct sockaddr_in* ipv4Address = reinterpret_cast<struct sockaddr_in*>(address);
auto a = *ipv4Address;

Падение однозначно происходит при разыменовании *ipv4Address.

Почему это происходит и как сделать правильно?


Ответы (0 шт):