这个hostent为什么会导致段错误?
问题描述:
struct hostent *hostName;
struct in_addr ipv4addr;
inet_pton(AF_INET, inet_ntoa(client.sin_addr), &ipv4addr);
hostName = gethostbyaddr(&ipv4addr, sizeof(ipv4addr), AF_INET);
printf("Host name: %s\n", hostName->h_name);
它在最后一行发生段错误。我查了一下正确使用hostent,msdn文档显示它正在被使用。什么会导致段错误?这个hostent为什么会导致段错误?
答
如果出现错误,gethostbyaddr()
函数返回NULL
,我没有看到您在代码中检查该函数。试图取消引用NULL
指针会导致段错误。
你需要的东西,如:
if (hostName == NULL) {
printf("There was an error!\n");
exit(1);
}
您可以使用herror()
函数打印出由解析遇到的实际错误(尽管手册页指出herror()
是过时的)。
也许gethostbyaddre resturns NULL和解除引用NULL会导致段错误;或者hostName-> h_name为NULL,然后printf()为NULL segfaults。 – 2012-04-25 20:43:52