gpt4 book ai didi

c - 这个段错误的原因是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:02 25 4
gpt4 key购买 nike

它不会总是发生,但会在服务器应用程序运行一段时间后发生。

这是什么原因,我该如何解决?

代码如下:

struct hostent*     Host;
Result->sin_family=AF_INET;
Result->sin_port=htons((unsigned short)Port);

Host=gethostbyname(HostName);

if(!Host)
{
unsigned long int addr=inet_addr(HostName);
if(addr!=-1)
Host=gethostbyaddr(&addr,sizeof(addr),AF_INET);

if(!Host)
{
if(errno!=ETIMEDOUT)
errno=-1; /* use h_errno */
printf("Unknown host for server [%s].", HostName);
return(0);
}
}

memcpy((char*)&Result->sin_addr,(char*)Host->h_addr,sizeof(Result->sin_addr));

核心转储:

#0  0x0000000000401913 in proxy_getaddr (HostName=0x7ae30be0 "stackoverflow.com", Port=80, Result=0x7ae30bd0) at proxy.c:529

529 memcpy((char*)&Result->sin_addr,(char*)Host->h_addr,sizeof(Result->sin_addr));
(gdb) p *Host
$4 = {h_name = 0xc4ee048 "", h_aliases = 0xc4ee030, h_addrtype = 2, h_length = 4, h_addr_list = 0xc4ee038}
(gdb) print Result
$5 = (struct sockaddr_in *) 0x7ae30bd0
(gdb) print *Result
$6 = {sin_family = 2, sin_port = 20480, sin_addr = {s_addr = 0}, sin_zero = "\000\000\000\000\000\000\000"}



(gdb) p Host->h_addr_list[0]
$1 = 0x0
(gdb) p Host->h_addr_list
$2 = (char **) 0x1bd9d050

最佳答案

鉴于 Host 和 Result 变量都指向合法的内存块,最可能的原因是 Host->h_addrNULL。如果 gethostbyname()gethostbyaddr() 返回的地址列表为空,就会出现这种情况。

我不知道这是怎么引起的(我的 OS X 系统上的文档暗示如果找不到地址,两个函数都应该返回 NULL)。但是,我会在调试器中检查 Host->h_addr_list[0] 以确认。

编辑

调试信息的更新显示了问题所在:Host->h_addr 为 NULL。 h_addr 实际上是这样的#define:

#define h_addr h_addr_list[0]

其中一个函数返回一个带有空地址列表的 struct hostent

关于c - 这个段错误的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6095026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com