若问一个进程间的通信问题。

yydrewdrew 2007-06-01 03:39:51
我用共享内存实现进程间的通信。
用shmget和shmat实现内存的分配和映射。
得到指针void *ptr指向分配的地址;

将ptr转换成类的指针class*运行出现Segmentation fault。
若将ptr指向结构体就没问题,但是结构体里有诸如string变量的话就会出现同样错误。
是不是因为shmget和shmat是c调用所以不能存c++的类?
共享内存分配有没有面向c++的?
string这个变量我必须传,麻烦大家帮我想想办法。
...全文
231 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hundlom 2007-06-02
  • 打赏
  • 举报
回复
你申请的共享内存大小是固定的,可 struct multi_data*cc = (struct multi_data*)(aa);时结构体的大小因为string类型却无法固定大小。
yydrewdrew 2007-06-01
  • 打赏
  • 举报
回复
我把代码发出来:

#include <sys/types.h>
#include <sys/ipc.h>
#include <string>
#include <sys/shm.h>

using namespace std;

struct multi_data
{
int m;
string a;
};

int main()
{
void *aa = NULL;
int shmid;
int key;
key = ftok(".",1);
shmid = shmget(key,64*64,IPC_CREAT|0666);
aa = shmat(shmid,0,0);
string b = "";
string a("hdfhdjfhdj");
struct multi_data*cc = (struct multi_data*)(aa);
cc->a = a;
b = cc->a;
return 0;
}


如果去掉multi_data里的string a,传int m话,就会成功。
yydrewdrew 2007-06-01
  • 打赏
  • 举报
回复
错误是发生在赋值时:比如将一个string变量值赋给ptr->string成员。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧