两个进程(或程序)正在使用相同的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/