gpt4 book ai didi

c - C 中的共享内存,shmdt 问题,它抛出无效参数

转载 作者:行者123 更新时间:2023-11-30 15:32:00 25 4
gpt4 key购买 nike

我有这样的结构

 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);

最佳答案

您向 shmdt 传递了错误的值:你给它的地址是 buf你的结构体的成员,而不是你存储在 int 中的指针变量。

要解决这个问题,首先要修复你的结构。 buf的类型应该是void* (或者 int* 如果这对您来说更实用)。然后修复附加代码来设置它:

segms[count_s].buf = buffer;

如果你选择void* ,您应该调整 buffer 的类型也是。

然后你就可以shmdt(segms[i].buff) .

关于c - C 中的共享内存,shmdt 问题,它抛出无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24473297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com