C ++访问结构变量导致分段错误
C++ accessing struct variable causes segmentation fault
我有这部分代码:
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) 错误,但我不确定问题是什么 is.I 尝试打印出变量的大小。
std::cout << sizeof(server_address.sin_addr.s_addr) << " - " << sizeof(server->h_addr_list) << std::endl;
这一行打印的是“4 - 8”,如果我要复制,结果不应该一样吗?
另外:
std::cout << server->h_length << std::endl;
仅此行会导致分段 fault.So 我相信访问此变量会导致 problem.I 需要您的帮助来修复它!
提前致谢!
不正确的if
语句:
if(server = NULL)
应该是:
if(server == NULL)
您将 server
设置为 NULL,然后尝试取消引用 NULL 指针。
但是,即使 server
为 NULL,您的代码仍会继续并取消引用 server
。在这种情况下,您应该绕过使用 server
的代码。
我有这部分代码:
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) 错误,但我不确定问题是什么 is.I 尝试打印出变量的大小。
std::cout << sizeof(server_address.sin_addr.s_addr) << " - " << sizeof(server->h_addr_list) << std::endl;
这一行打印的是“4 - 8”,如果我要复制,结果不应该一样吗?
另外:
std::cout << server->h_length << std::endl;
仅此行会导致分段 fault.So 我相信访问此变量会导致 problem.I 需要您的帮助来修复它!
提前致谢!
不正确的if
语句:
if(server = NULL)
应该是:
if(server == NULL)
您将 server
设置为 NULL,然后尝试取消引用 NULL 指针。
但是,即使 server
为 NULL,您的代码仍会继续并取消引用 server
。在这种情况下,您应该绕过使用 server
的代码。