gpt4 book ai didi

C++ inet_ntoa 导致段错误

转载 作者:行者123 更新时间:2023-11-28 03:33:38 25 4
gpt4 key购买 nike

inet_ntoa() 函数导致以下代码中的 Segmentation fault 错误。请告诉我,为什么。我该如何解决?非常感谢!

void ClientAdd ( int clientSocket )
{
sockaddr clientAddress;
socklen_t clientAddressLength;
sockaddr_in* clientAddressInternet;
char* clientHost;

getpeername ( clientSocket , &clientAddress , &clientAddressLength );
clientAddressInternet = (struct sockaddr_in*)&clientAddress;
clientHost = inet_ntoa ( clientAddressInternet->sin_addr );
};

我认为这都是关于 inet_ntoa 的返回值。但我不知道如何找出...

PS 用g++@debian 编译

最佳答案

getpeername 期望传递两个指向内存的指针,它可以在其中写入客户端地址和客户端地址长度。所以你的原始代码

sockaddr*            clientAddress;
socklen_t* clientAddressLength;

getpeername ( clientSocket , clientAddress , clientAddressLength );

是错误的,因为两个指针 clientAddressclientAddressLength 未初始化。这些指针将指向内存中的某个任意位置,并且写入它们很容易使程序崩溃,如果不是立即崩溃,那么不久之后。正确调用getpeername 最简单的方法是声明两个变量,而不是两个指针,然后使用地址运算符'&'将这些变量的地址传递给getpeername。像这样

sockaddr            clientAddress;
socklen_t clientAddressLength;

getpeername ( clientSocket , &clientAddress , &clientAddressLength );

关于C++ inet_ntoa 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820498/

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