从另一个进程引用内存分配指针指向的元素时出现分段错误
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()
)
- 在结构中使用字符数组
我有一个 "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()
) - 在结构中使用字符数组