从另一个进程引用内存分配指针指向的元素时出现分段错误

Segmentation Fault when referring from another process to an element a memalloced pointer points at

我有一个 "Server" 和一个 "Client" 进程,它们 "communicate" 通过结构共享内存。

typedef struct
{
  char* buffer;
  int cards;
  int maxCards;
}  myStruct

"Server"和"Client"进程都可以get/set这两个int类型的值,但是缓冲区不同(我们用它作为指向chars的指针) : "Server" 分配内存,如:

(*sharedMem).buffer = (char*) malloc(sizeof(char)*maxCards);

能够设置或获取值:

(*sharedMem).buffer[0] = 'a';
printf("%c\n",(*sharedMem).buffer[0]);

但是当 "Client" 进程试图访问一个字符时:

printf("%c\n",(*sharedMem).buffer[0])

它因 Segmentation Fault Core Dumped 错误而崩溃。 有没有不使用数组或列表就可以解决这个问题的方法?有任何想法吗?

两个进程都有不同的地址空间,因此一个进程中的指针在另一个进程中通常没有意义(除了可能 NULL)。

如果您需要在进程之间交换更多数据,您可以使用

  • 管道(参见pipe()系统调用)
  • 共享内存(参见 POSIX shm* 调用)
  • 内存映射文件(参见mmap()
  • 在结构中使用字符数组