【问题标题】:Segmentation Fault when referring from another process to an element a memalloced pointer points at从另一个进程引用 memalloced 指针指向的元素时出现分段错误
【发布时间】:2015-12-24 11:03:25
【问题描述】:

我有一个“服务器”和一个“客户端”进程,它们通过结构共享内存“通信”。

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

“服务器”和“客户端”进程都可以获取/设置这两种 int 类型的值,但缓冲区不同(我们将其用作指向字符的指针):“服务器”分配内存,喜欢:

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

具有设置或获取值的能力:

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

但是当“客户端”进程试图访问一个字符时:

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

它因 Segmentation Fault Core Dumped 错误而崩溃。 有没有办法在不使用数组或列表的情况下解决这个问题?有任何想法吗?

【问题讨论】:

  • 两个进程有不同的地址空间,所以一个中的指针可能在另一个中没有意义?
  • 为什么不能使用数组或列表?因为使用数组作为缓冲区正是您需要的解决方案。
  • @Jens 有什么办法可以将指定的地址发送到“客户”进程吗?
  • @FUZxxl 这是一个解决方案,如果我无法在进程之间更改地址,我将使用一个列表。
  • 找到答案了,这个问题已经回答了:stackoverflow.com/questions/14558443/…

标签: c linux pointers malloc shared-memory


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2020-03-20
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多