共享内存中出现段错误
Linux系统编程---共享内存中出现段错误
- 简述
- 1、共享内存相关使用
- 2、 使用上错误示例
- 3、正确示例
- 4、思考
简述
关于共享内存中,另一个程序访问时出现段错误的问题,后来在一篇博文中找到了问题出错我原因
共享内存常见段错误
1、共享内存相关使用
Linux进程间通信——使用共享内存
2、 使用上错误示例
从上文的链接上,可以大概的了解到共享内存的使用,这里就只拿出使用的共享内存的结构体。
struct date{int flag;char *buf;
};
//flag表示是否写入内容,buf指针则指向一块内存。
在使用这个结构体时,写入端按正常情况将对应内容写入,写入结果都是正确的,没有任何报错信息。但是读取端在读取信息时,发现读取buf时出现段错误。
3、正确示例
struct date{int flag;char buf[4];
};
出现错误时,对结构体进行修改,不再使用指针来作为共享内存的结构体,而是使用一个静态数组。
4、思考
我在使用时,有出现指针滥用,没有对共享内存的指针进行初始化,而直接对指针指向一个字符串指向,导致另一个程序访问时,出现段错误。
我认为出现的问题出在,结构体中使用了一个指针,我直接在代码中,给指针赋了一个字符串,这样做导致指针在写入程序中得到的地址是一个随机地址,当读入端再去读这个指针中的内容时,因为是另一个进程再去读取,导致地址读取错误。
我总结在共享内存中不要对指针进行随意使用,至少对指针进行初始化操作。关于更深层的原因,后面需要我再去了解,这里更多我认为是因为指针的失控。
共享内存中出现段错误相关推荐
- Linux C编程中的段错误
段错误(Segmentation Fault) 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只 ...
- 转:使用 PHP 直接在共享内存中存储数据集
概述 共享内存是一种在相同机器中的应用程序之间交换数据的有效方式.一个进程可创建一个可供其他进程访问的内存段,只要它分配了正确的权限.每个内存段拥有一个惟一的 ID(称为 shmid),这个 ID 指 ...
- C/C++中的段错误(Segmentation fault)[转]
Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的. 来自:http://oss.lzu.edu.cn/blog/article.php ...
- Linux容器间共享内存,C++容器模板在共享内存中的使用
本文用于探讨在共享内存中使用容器的好处,以及几种在共享内存中C++模板容器的方法. 1 为什么要在共享内存中使用模板容器? 为什么要避开普通内存而选择共享内存,那肯定是使用共享内存的优势: 共享内存可 ...
- python slice是共享内存吗_在共享内存中使用numpy数组进行多处理
在共享内存中使用numpy数组进行多处理 我希望在共享内存中使用numpy数组,以便与多处理模块一起使用.困难之处在于它像一个numpy数组一样使用,而不仅仅是作为一个ctype数组使用.from m ...
- 共享内存中使用指针_详解c++中字符指针数组的使用
之前有写过一篇叫c++中动态数组的使用,今来看看c++中的字符指针数组的使用. 涛哥:c++中的动态数组使用zhuanlan.zhihu.com 指针数组,就指向指针的指针,很早以前在说指针的时候说 ...
- PHP 直接在共享内存中存储数据集
共享内存是一种在相同机器中的应用程序之间交换数据的有效方式.一个进程可创建一个可供其他进程访问的内存段,只要它分配了正确的权限.每个内存段拥有一个惟一的 ID(称为 shmid),这个 ID 指向一个 ...
- 内存泄漏、内存溢出、内存越界、段错误、堆溢出、栈溢出
内存泄露 内存泄漏(memory leak)是应用程序分配某段内存后,由于疏忽或者错误,失去了对该段内存的控制,因而造成了内存的浪费. 或者可以说向系统申请分配内存进行使用(new),但是用完后不归还 ...
- 将读写锁放到共享内存中,实现进程之间对数据的读写访问控制
代码 #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sy ...
最新文章
- android控制wifi状态
- 第六天2017/04/11(1:结构体链表基础和相关经典操作)
- 考研专业课计算机网络调剂,计算机网络信息中心2019年硕士研究生接收调剂信息公告...
- 网络编程 UDP套接字
- iOS如何实现语音播报及后台播放
- 为什么需要两个Survivor区?
- B2C和B2B之间有多大差距
- springbboot加密打包_Spring Boot 配置 Security 密码加密
- java实时更新权限_java – 如何使用Spring Security重新加载用户更新的权限
- PowerToys 又推新工具 Launcher,可以替代 Win+R
- cesium加载无人机倾斜摄影三维模型
- oracle 变长数组,oracle:变长数组varray,嵌套表,集合
- Shell编程—【03】数学运算expr与bc浮点数运算
- C++ (MFC)将字符串保存到指定目录下的文本中
- [matlab也能用来机器学习!?]保存工具箱模型并使用模型预测结果
- 如何检索国外的博士论文
- 4G手机网络免费开通高清语音VoLTE
- 【JavaScript】案例1:使用JS完成注册页面校验
- 华为企业交换机ACL经典案例
- 适用于监控大屏的websocket
热门文章
- 安卓权限Manifest.permission
- CIFAR-10模型训练python版cifar10数据集
- 安卓selinux关闭会怎样_Magisk面具官方推送Magiskv21.0版本,已支持安卓11机型获取root...
- 运营商打破默契,中国移动地方公司以优惠的形式推出低价5G套餐
- java中foreach用法_java程序中foreach用法示例
- 【博学谷学习记录】超强总结,用心分享|大数据之GROUPING
- TikTok数据分析 | 教你分析直播数据
- Fabric源码分析之九数据库存储源码分析leveldb
- 推荐几款开发常用的小插件
- java使用Graphics2D进行图片文字合成示例