如何将结构分配给共享内存ic++;? 我有一个模糊的想法,如何在C中使用共享内存,我试图在C++程序中使用相同的方法。 我想共享一个结构: typedef struct { string passw; string encoded; string tries; char steps; }gameInfo; gameInfo *gI;
这就是我试图做到的:如何将结构分配给共享内存ic++;? 我有一个模糊的想法,如何在C中使用共享内存,我试图在C++程序中使用相同的方法。 我想共享一个结构: typedef struct { string passw; string encoded; string tries; char steps; }gameInfo; gameInfo *gI;,c++,struct,shared-memory,C++,Struct,Shared Memory,这就是我试图做到的: int memory; memory = shmget(IPC_PRIVATE, sizeof(gameInfo)*max_players, IPC_CREAT | 0600); if(memory==-1) {printf("Shared memory error");} (稍后) 我得到“error:no match for'operator=”(操作数类型为'gameInfo'和'void*)”错误。 最快的解决办法是什么 即使您设法理解了如何使用place
int memory;
memory = shmget(IPC_PRIVATE, sizeof(gameInfo)*max_players, IPC_CREAT | 0600);
if(memory==-1)
{printf("Shared memory error");}
(稍后)
我得到“error:no match for'operator=”(操作数类型为'gameInfo'和'void*)”错误。
最快的解决办法是什么 即使您设法理解了如何使用placement,您也无法使用POSIX共享内存在Linux上运行您的示例
因为不是POD类,并且包含未指定角色和行为的内部指针。查找位置
new()
。请注意,在执行分配时,还必须确保std::string
使用共享内存存储字符串内容。。。因此,您应该使用普通的C字符数组。固定长度,作为结构成员包装在结构中。无论如何,您的方法是有缺陷的:std::strings默认使用堆,因此无法在共享内存中生存。gI=(gameInfo*)shmat(内存,NULL,0)
(但正如其他人所说,您不能将std::string
与共享内存一起使用),但是可以为标准库中的所有内容指定分配器。但是,它不再是通常的std::string
*gI = shmat(memory,NULL,0);