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

Shared Memory UNIX Segmentation Fault (fork()) in C++

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

.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的对象class,我测试过没有问题

有什么想法吗?

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

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