2012-04-09 64 views
0

我正在构建一个建筑物服务器和客户端程序。我试图让它们通过套接字进行通信(如果重要的是我正在写一个32位操作系统的Linux,并且客户端和服务器都将在同一系统上运行)。现在,我的下一个结构:访问该结构时通过套接字和segfaulting发送结构

struct config_line { 
    char name[MAX_WORD]; //1 byte 
    int time;    //4 bytes 
}; 

struct config { 
    struct config_line *lines; // 4 bytes, points to a struct of 8 bytes 
    int count;     // 4 bytes 
}; 

configData被定义为followes

struct config configData; // global 

我发送configData这样的:现在

send (clients [scn], &configData, sizeof (configData), 0) 

,我的客户端程序,里面当我尝试访问

configData.lines[configIndex].name 

它在该行上发生段错误。任何人有一个想法为什么?

+0

recv(s,&configData, sizeof(configData),0); – 2012-04-09 20:58:29

回答

1

当您发送类型config,它有一个指针config_line空间,但不包含动态分配的,其中该指针指向(我认为)阵列中的数据。

然后客户端获得config类型,但它具有无效的指针值(在客户端上),因为数组未发送且指针未设置为该数组。 (指针在发送者上有效,但不在客户端上 - 它们使用单​​独的内存空间)

您将需要指定一个固定大小的数组config,它可以包含您将要使用的最大元素数(然后发送将包含该数据),或发送动态数组的内容并在客户端解析它,并将config指针设置为该数组,因此解引用有效