访问该结构时,通过套接字发送struct和segfaulting

时间:2012-04-09 20:13:45

标签: sockets pointers client linked-list

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

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定义如下

struct config configData; // global

我发送了这样的configData:

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

现在,在我的客户端程序中,当我尝试访问

configData.lines[configIndex].name

它在该行上出现了段错误。任何人都知道为什么?

1 个答案:

答案 0 :(得分:1)

当您发送类型config时,它有config_line指针的空间,但不包含动态分配的(我假设)数组中的数据指针指向。

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

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