我有一个这样的结构
typedef struct {
int id; //Client ID
int size; //Memory Size
int mem; //ID obtained from shmid
int buf; //shared memory var
} Segm;
Segm segms[10];
int count_s = 0;
int * buffer; /* shared buffer */
/* we declared to zone to share */
buffer = shmat (mem, (char *)0, 0);
if (buffer == NULL) {
fprintf (stderr, "Error reserve shared memory \n");
return -1;
}
segms[count_s].mem = mem;
segms[count_s].buf = *buffer;
上面的代码为当前结构创建了共享内存,它工作得很好,但是当我试图分离内存时,shmdt抛出了我,无效参数,我不明白为什么。
int mem = segms[i].mem;
/* detach from the segment: */
if (shmdt(&segms[i].buf) == -1) {
perror("[SHMservice] Error: shmdt");
result = -2;
}
shmctl (mem, IPC_RMID, (struct shmid_ds *)NULL);
发布于 2014-06-29 13:23:22
您向shmdt
传递了错误的值:您为它提供的是结构的buf
成员的地址,而不是存储在int
变量中的指针。
要修复它,首先要修复您的结构。buf
的类型应该是void*
(或者int*
,如果对您更实用的话)。然后修复附加代码以设置它:
segms[count_s].buf = buffer;
如果你使用void*
,你也应该调整buffer
的类型。
然后你就可以shmdt(segms[i].buff)
了。
https://stackoverflow.com/questions/24473297
复制相似问题