两个进程(或程序)正在使用相同的System V共享内存段,
这基本上是这个结构

/* file: shmem.h */
struct Shmem{
    int *array;
}


从program1我这样初始化共享内存

/* file: program1.c */
Shmem_init(shmem, siz);
for (int i=0; i<siz; i++)
    shmem->array[i] = number;


像这样实现Shmem_init的地方

/* file: shmem.c */
void Shmem_init(Shmem *shmem, int siz){
    shmem->array = (int *)malloc(siz * sizeof(int));
}


然后,如果我尝试从program2访问shmem->array[i],我的程序将冻结,并且什么都不做(未定义的行为?)

我应该期望过吗?是因为元素array[1], array[2], ...
存储在program1的堆中,因此program2无法访问?

谢谢

[不要在意诸如shmget()shmat()之类的东西,这些都是照料的]

最佳答案

您回答了自己的问题... malloc返回的指针仅对调用它的进程有效。

关于c - 共享内存和指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34384814/

10-11 18:47