为什么在本地进程之间传递指针时会导致分段错误?

Ume*_*ooq 1 c pointers network-programming segmentation-fault

我从服务器传递一个指针数组到客户端.但是在客户端,当我拒绝接收到的数组时,我会得到分段错误.服务器和客户端都是操作系统的本地服务器.我认为我在指针中犯了一些错误并违反了一些指针规则.

这是代码:

Server.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);
Run Code Online (Sandbox Code Playgroud)

Client.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);
}
Run Code Online (Sandbox Code Playgroud)

struct WinGoku仅包含char[50]我正在复制数据的地方strcpy.

发送和接收不返回-1,因此可以正确发送和接收数据.

我在做什么错?

Bri*_*ain 8

服务器和客户端都是操作系统的本地服务器.我确信我在指针中犯了一些错误,并且在指针规则上做出了假设.

指针位于称为"虚拟内存"的空间中.范围仅限于单个流程.

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


Som*_*ude 5

您无法通过网络发送指针.嗯,从技术上讲,你可以在接收系统上指出相同的东西.

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