gpt4 book ai didi

c - 将 AF_INET 分配给 sockaddr_in 结构的 sin_family 属性时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:15 29 4
gpt4 key购买 nike

这是我的问题:

我试图用适当的信息填充套接字地址结构,以便我可以在处理服务器和客户端之间通信的程序中使用它。这是服务器代码的一部分。问题是它会出现段错误。当我运行 gdb 时,它说当我将 AF_INET 分配给 servaddrsin_family 属性时发生段错误> 结构。

代码:

servaddr->sin_family = (short)(AF_INET); 

我似乎无法弄清楚为什么会这样。

完整代码如下:

// Function Prototypes
struct sockaddr_in* getServerInfo(char[]);

int main()
{

char hostname[MAXHOSTNAMELEN];
struct sockaddr_in* servaddr = getServerInfo(hostname);

return 0;
} // End main

struct sockaddr_in* getServerInfo(char hostname[])
{

struct sockaddr_in* servaddr = malloc((size_t)sizeof(struct sockaddr_in));
gethostname(hostname, 32);
struct hostent *hostptr;
hostptr = gethostbyname(hostname);

memset((void *) &servaddr, 0, (size_t)sizeof(servaddr));
servaddr->sin_family = (short)(AF_INET);
memcpy((void *)& servaddr->sin_addr, (void *) hostptr->h_addr, hostptr->h_length);
servaddr->sin_port = htons((u_short)8000);

return servaddr;
}

最佳答案

你的错误在这里:

memset((void *) &servaddr, 0, (size_t)sizeof(servaddr));

改为这样做:

memset((void *) servaddr, 0, (size_t)sizeof(*servaddr));

否则,您会将 servaddr 的指针归零(即将其变为 NULL)。当您尝试使用它时,它就会爆炸。

同样,您需要更改您的 memcpy 调用。

关于c - 将 AF_INET 分配给 sockaddr_in 结构的 sin_family 属性时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14431042/

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