我正在构建一个构建服务器和一个客户端程序。我试图让它们通过套接字进行通信(如果重要的是我在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
它在该行上出现了段错误。任何人都知道为什么?
答案 0 :(得分:1)
当您发送类型config
时,它有config_line
的指针的空间,但不包含动态分配的(我假设)数组中的数据指针指向。
然后客户端获取config
类型,但它具有无效的指针值(在客户端上),因为未发送数组且指针未设置为该数组。 (指针在发送方有效,但在客户端无效 - 它们使用单独的内存空间)
您需要在config
中指定一个固定大小的数组,该数组可以包含您想要存储的最大元素数(然后发送将包含该数据),或者发送动态内容数组并在客户端解析它并将config
指针设置为该数组,因此解除引用有效