C ++访问struct变量会导致分段错误

时间:2016-01-03 00:12:26

标签: c++ sockets struct memcpy

我有这部分代码:

int connectingSocket,port;
struct sockaddr_in server_address;
struct hostent *server;
server = gethostbyname("localhost");
if(server = NULL)
    dataFile << "Error finding a host!" << std::endl;
port = 7017;
connectingSocket = socket(AF_INET,SOCK_STREAM,0);
if(connectingSocket < 0)
    dataFile << "Error opening a socket" << std::endl;
memset(&server_address,0,sizeof(server_address));
server_address.sin_family = AF_INET;
server_address.sin_port = htons(port);
memcpy(&(server_address.sin_addr.s_addr), server->h_addr_list,server->h_length);

我确信最后一行会引发Segmentation fault(Core dumped)错误,但我不确定问题是什么。我尝试打印出变量的大小。

std::cout << sizeof(server_address.sin_addr.s_addr) << " - " << sizeof(server->h_addr_list) << std::endl;

此行打印&#34; 4 - 8&#34;如果我要复制,结果是否应该相同?

此外:

std::cout << server->h_length << std::endl;

这一行单独导致分段错误。所以我相信访问这个变量会导致问题。我需要你的帮助来修复它!

提前谢谢!

1 个答案:

答案 0 :(得分:1)

{state} {错误if州:

if(server = NULL)

应该是:

if(server == NULL)

server设置为NULL,然后尝试取消引用NULL指针。

但是,即使server为NULL,您的代码也会继续,并取消引用server。在这种情况下,您应该绕过使用server的代码。