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.
Почему это происходит и как сделать правильно?