2012-11-24 45 views
0

以下一段代码给了我错误。我执行它时会发生分段错误。尝试从客户端接收时出现分段错误

bool handshake() { 
    node recv; 
    void *ptr = recv; 
    recverror = recvfrom(sock,(void*) recv, sizeof((void *) recv), 0, (struct sockaddr*)&from, &len); 
    cout << recv.data; 
    return true; 
} 

这是节点的结构:

struct node { 
    char *data; 
    int size_data; 
    int dest_port; 
    int src_port; 
    int flag; 
    double checksum; 
    int seq; 
    int ack; 
    int windowsize; 
    node* next; 
    node() {next = NULL;} 
}; 

回答

0
void *ptr = recv

是错误的。取而代之的是void *ptr = &recv

2

有你的代码的几大问题:

首先,ptr的分配不正确,应该是:

void *ptr = &recv; 

你应该得到关于从类型不匹配编译器错误的码。

接下来,你的参数recvfrom是错误的:

recverror = recvfrom(sock, ptr, sizeof(recv), 0, (struct sockaddr*)&from, &len); 

您可以将结构不能转换为指针,要通过结构的地址。

最后,最重要的是,在网络上传递的结构中包含char*成员是没有意义的。指针只在单个进程中有意义,您不能在进程或机器之间传递它们。在将数据放入电线之前,您需要使用serialize

相关问题