这个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为什么会导致段错误?

+0

也许gethostbyaddre resturns NULL和解除引用NULL会导致段错误;或者hostName-> h_name为NULL,然后printf()为NULL segfaults。 – 2012-04-25 20:43:52

如果出现错误,gethostbyaddr()函数返回NULL,我没有看到您在代码中检查该函数。试图取消引用NULL指针会导致段错误。

你需要的东西,如:

if (hostName == NULL) { 
    printf("There was an error!\n"); 
    exit(1); 
} 

您可以使用herror()函数打印出由解析遇到的实际错误(尽管手册页指出herror()是过时的)。