0

我正在构建一个建筑服务器和一个客户端程序。我试图让它们通过套接字进行通信(以防我在 32 位操作系统 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

它在那条线上有段错误。任何人都知道为什么?

4

1 回答 1

1

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

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

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

于 2012-04-09T20:21:38.383 回答