所以我正在制作一个程序,它将有多个进程都需要访问我已经定义的结构,节点。所以我按如下方式初始化内存:
sharedMemory = (node*)malloc(sizeof(node));//sharedMemory is a global node
sharedMemory->syskey = sys_key;//just a variable from a function
segment_id = shmget(sharedMemory->syskey, size, S_IRUSR | S_IWUSR | IPC_CREAT);
sharedMemory = (node*)shmat(segment_id, NULL, 0);
这似乎没问题。但是我需要稍后访问这段内存。所以我试图做的是:
segment_id = shmget(sharedMemory->syskey, size, S_IRUSR | S_IWUSR | IPC_CREAT);
sharedMemory = (node*)shmat(segment_id, NULL, 0);
然后使用sharedMemory。但是,当我这样做时,sharedMemory中的所有内容似乎都被重置为' null' (数组等)。我确信我只是在做一些愚蠢的事情,但文档对我来说有点混乱。任何帮助将不胜感激。
答案 0 :(得分:1)
我发现除了sharedMemory是一个全局变量之外我正确地做了。每当我打电话给shmat并附上它时,我都需要重新声明这个。似乎现在正在运作。