1

我正在将一组指针从服务器传递到客户端。但是,在客户端,当我取消引用接收到的数组时,会出现分段错误。服务器和客户端都是操作系统本地的。我认为我在指针方面犯了某种错误并违反了某些指针规则。

这是代码:

服务器.c

struct WinGoku goku,windows,gates;

struct WinGoku *array[3];
array[0] = &goku;
array[1] = &windows;
array[2] = &gates;

send(conSocket, array, sizeof(&array), 0);

客户端.c

struct WinGoku **array;

int rec =  recv(mySocket, array, 4, 0);

printf("bytes Recieved %d\n", rec);

int i;
for(i = 0; i<3;i++)
{
    printf("%s\n",array[i]->test);
}

struct WinGoku仅包含char[50]我在其中复制数据的strcpy.

发送和接收没有返回-1,因此数据被正确发送和接收。

我在做什么错误?

4

3 回答 3

8

服务器和客户端都是操作系统本地的。我确信我在指针方面犯了某种错误并违反了一些指针规则。

指针位于所谓的“虚拟内存”空间中。范围仅限于单个进程。

尽管在同一台计算机上,但每个服务器、客户端都有自己的虚拟内存空间。这些指针在每个中都是无效的。您必须序列化(通常是编组)要通过网络发送的内存内容。

于 2013-10-23T18:00:33.827 回答
5

您不能通过网络发送指针。好吧,从技术上讲,你可以,但他们不会在接收系统上指向同一个东西。

如果实际对象很简单,即不包含指针,那么您可以直接发送它们。

于 2013-10-23T17:58:32.483 回答
0

sizeof(&array) 不是 struct WinGoku * 3 的大小

它应该是(3*sizeof(WinGoku))

编辑:

一个进程的指针不能在另一个进程中访问。你应该在服务器和客户端之间发送整个。

于 2013-10-23T18:05:40.437 回答