linux 共享内存 出错,共享内存的std :: string给出了分段错误(linux)
我目前正在尝试在Linux上的2个进程之间的共享内存中放置结构.我没有问题共享bool或int但是当尝试共享字符串时,std :: string或char我有一个分段错误错误.
现在我的代码是:
#include
#include //shmat
#include
#include //open
#include
#include //close
using namespace std;
struct Prises{
int numero;
int transactionId;
bool reservation;
bool charge;
bool disponibilite;
bool defaut;
bool verrouillage;
bool trappe;
int LEDverte;
int LEDrouge;
std::string carte;
std::string etat;
};
int main()
{
const char *keyFile = "/tmp/key.dat";
/* Make sure the file exists. */
int descriptor = open(keyFile, O_CREAT | O_RDWR, S_IRWXU);
/* Only wanted to make sure that the file exists. */
close(descriptor);
/* Generate memory key. */
key_t sharedKey = ftok(keyFile, 1);
/* Get the shared memory segment id. Note we include
the permissions. */
int sharedSpaceId = shmget(sharedKey, 2*sizeof(Prises),
IPC_CREAT | S_IRUSR | S_IWUSR);
/* Attach the shared memory segment. */
Prises *PrisesArray = (Prises *) shmat(sharedSpaceId, NULL, 0);
PrisesArray[1].defaut=true;
PrisesArray[2].defaut=false;
int ok;
std::cin>>ok;
return 0;
}
在这个例子中,从2个结构共享2个bool工作得很好但是如果我尝试输入数据或从std :: string(etat,carte)读取数据,如下所示:
PrisesArray[1].etat="hello";
它在调试中给了我一个分段错误(并且明确在发布时不起作用),我尝试使用简单的字符串和字符(甚至一个字符),它仍然给我一个分段错误.
在文本共享或在这里犯错时我错过了什么吗?
linux 共享内存 出错,共享内存的std :: string给出了分段错误(linux)相关推荐
- linux识别fta32出错,解决FAT32格式U盘安装win10时0x8007000D错误
问题由来 我一直使用U盘,UltraISO软碟通和msdn原版镜像来装系统.最近在把Win10 1709升级为1803时遇到了问题.同样也是使用UltraISO刻录镜像到U盘的方法安装的,这次从U盘启 ...
- 写出常用的5个linux命令 并解释,【PHP面试题】写出尽可能多的Linux命令。
文章目录 一.考点 1.Linux常用命令 1) 系统安全 2) 进程管理 3) 用户管理 4) 文件系统 5) 系统关机和重启 6) 网络应用 7) 网络测试 8) 网络配置 9) 常用工具 10) ...
- linux signal 11 问题,embedded-在Linux中qemu:uncaught target signal 11(分段错误)
在刮擦盒内我正在执行git clone,收到以下错误: qemu: uncaught target signal 11 (Segmentation fault) - core dumped 错误: / ...
- 如何将std :: string转换为const char *或char *?
如何将<code>std::string转换为char*或const char* ? #1楼 看看这个: string str1("stackoverflow"); c ...
- linux 共享内存为分配,Linux在x86_64上共享内存分配
我有64位REHL linux,Linux Linux ipms-sol1 2.6.32-71.el6.x86_64#1 SMP x86_64 x86_64 x86_64 GNU / Linux RA ...
- Linux进程间通信六 Posix 共享内存简介与示例
1. 共享内存简介 共享内存主要用于不同进程之间相互通信,因为操作的是同一块地址,不需要内核和用户层之间数据拷贝,属于最快的进程间通信方式,不过,为了防止读写冲突,一般需要额外的同步手段.之前介绍了S ...
- 标准C++类std::string的内存共享和Copy-On-Write(写时拷贝)
标准C++类std::string的内存共享,值得体会: 详见大牛:https://www.douban.com/group/topic/19621165/ 顾名思义,内存共享,就是两个乃至更多的对象 ...
- Linux基础入门--进程间通信--共享内存
Linux基础入门--进程间通信--共享内存 1.共享内存IPC原理 2.共享内存管理 1.共享内存IPC原理 共享内存进程间通信机制主要用于实现进程间大量的数据传输,共享内存是在内存单独开辟的一段内 ...
- Linux 18 IPC之共享内存shm
一.原理 共享内存是三个IPC(Inter-Process Communication)机制中的一个. 它允许两个不相关的进程访问同一个逻辑内存. 共享内存是在两个正在进行的进程之间传递数据的一种非常 ...
最新文章
- 低数值精度推理和训练
- Python学习【第七篇】基本数据类型
- 从创建数据库到备份恢复还原详解
- 中国机器人减速机行业十四五发展规划及未来需求预测报告2021-2027年
- java基础深入_java编程基础之方法深入
- php网站404页面302,404页面该怎么做?
- POJ3244(工科数学分析)
- groovy+mysql数据库_使用Groovy连接到MySQL
- 开发Adobe AIR的原生扩展
- php下的jsonp使用实例
- 搜狗Q1每天进账1886万,输入法日处理6亿请求成中国最大语音App
- springboot交通事故档案管理系统答辩PPT免费下载
- 如何判断python是否安装成功_python怎么判断模块安装完成
- 二叉链表java_二叉树的二叉链表存储及其Java实现
- 复习了C++前几章,做一个ASCII码转换的小程序
- 大话MIMO-OFDM联合工作实现过程
- 运筹优化算法工程师面试问题汇总
- GLM(General Language Model)代码分析
- C语言拆分一个三位数。以及交换两个数(常规法复习加指针法学习)
- Eclipse 报错The method xxx of type must override a superclass method、Description Resource Path Locati