0

我想通过套接字在结构中发送一个 void *。我的结构:

struct A
{
    int i;
    void * vptr;
};

客户端

struct A a;
struct B b;

// filling structure B
 .....

// filling structure A
a.i = 1;
a.vptr = &b
write(servsocket,(char*)&a,sizeof(struct A));

但是在服务器端,当我读取结构并将 void * 类型转换为另一个结构分段错误时。

服务器端

struct A *a;
stuct B *b;
char recvBuff[1024];
read(sock,recvBuff,sizeof(recvBuff));
a= (A*)recvBuff;
printf("%d",a->i);   // printing value 1
b = (B*)a->vptr;    // segmentation fault
4

1 回答 1

0

但是在服务器端,当我读取结构并将 void * 类型转换为另一个结构分段错误时。

指针仅在它起源的地址空间中才有意义,即在进程 A 中。它只是一个地址,类似于 4 个字节。当您将它移动到不同的进程(可能是不同的机器)时,该地址将不再有意义

因此,您需要以某种方式传输实际对象,而不仅仅是指向它的指针。

于 2013-09-02T06:37:22.250 回答