gpt4 book ai didi

c++ - C++ 中的共享内存 UNIX 段错误 (fork())

转载 作者:行者123 更新时间:2023-11-30 05:43:34 24 4
gpt4 key购买 nike

我对共享内存和进程有疑问。我将一个区域附加到共享内存,我创建了一个子进程,但是当我尝试修改父进程中的共享内存区域时,我只遇到段错误,它只能在子进程中修改。

.h

struct infoHeaders {
char words[512];
int num [512];
};
int idShMem;
struct infoHeaders * ptrInfo;

.cc

idShMem = shmget( 123456, sizeof(struct infoHeaders), 0700 | IPC_CREAT ); 
ptrInfo = (infoHeaders *) shmat( idShMem, NULL, 0 );

if (!fork()) {
sem.wait();
exit(0);
}
else {
ptrInfo->num[0] = 1; //Segmentation Fault
sem.signal();
}

sem是一个Semaphore类的对象,我测试过没有问题。

有什么想法吗?

最佳答案

检查 shmget 的返回值(您存储在 idShMem 中)。调用有可能失败。如果它是负数,那么您一开始就永远不会成功分配内存。如果 idShMem 为负,那是你的问题。这类似于检查 malloc() 调用是否为 NULL。

如果您确实失败了,请将 errno.h 的 include 语句添加到顶部,然后检查变量“errno”的值。这将是告诉您分配失败原因的错误代码。

关于c++ - C++ 中的共享内存 UNIX 段错误 (fork()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30148975/

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