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、思考

我在使用时,有出现指针滥用,没有对共享内存的指针进行初始化,而直接对指针指向一个字符串指向,导致另一个程序访问时,出现段错误。

我认为出现的问题出在,结构体中使用了一个指针,我直接在代码中,给指针赋了一个字符串,这样做导致指针在写入程序中得到的地址是一个随机地址,当读入端再去读这个指针中的内容时,因为是另一个进程再去读取,导致地址读取错误。

我总结在共享内存中不要对指针进行随意使用,至少对指针进行初始化操作。关于更深层的原因,后面需要我再去了解,这里更多我认为是因为指针的失控。

共享内存中出现段错误相关推荐

  1. Linux C编程中的段错误

    段错误(Segmentation Fault) 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只 ...

  2. 转:使用 PHP 直接在共享内存中存储数据集

    概述 共享内存是一种在相同机器中的应用程序之间交换数据的有效方式.一个进程可创建一个可供其他进程访问的内存段,只要它分配了正确的权限.每个内存段拥有一个惟一的 ID(称为 shmid),这个 ID 指 ...

  3. C/C++中的段错误(Segmentation fault)[转]

    Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的. 来自:http://oss.lzu.edu.cn/blog/article.php ...

  4. Linux容器间共享内存,C++容器模板在共享内存中的使用

    本文用于探讨在共享内存中使用容器的好处,以及几种在共享内存中C++模板容器的方法. 1 为什么要在共享内存中使用模板容器? 为什么要避开普通内存而选择共享内存,那肯定是使用共享内存的优势: 共享内存可 ...

  5. python slice是共享内存吗_在共享内存中使用numpy数组进行多处理

    在共享内存中使用numpy数组进行多处理 我希望在共享内存中使用numpy数组,以便与多处理模块一起使用.困难之处在于它像一个numpy数组一样使用,而不仅仅是作为一个ctype数组使用.from m ...

  6. 共享内存中使用指针_详解c++中字符指针数组的使用

    之前有写过一篇叫c++中动态数组的使用,今来看看c++中的字符指针数组的使用. 涛哥:c++中的动态数组使用​zhuanlan.zhihu.com 指针数组,就指向指针的指针,很早以前在说指针的时候说 ...

  7. PHP 直接在共享内存中存储数据集

    共享内存是一种在相同机器中的应用程序之间交换数据的有效方式.一个进程可创建一个可供其他进程访问的内存段,只要它分配了正确的权限.每个内存段拥有一个惟一的 ID(称为 shmid),这个 ID 指向一个 ...

  8. 内存泄漏、内存溢出、内存越界、段错误、堆溢出、栈溢出

    内存泄露 内存泄漏(memory leak)是应用程序分配某段内存后,由于疏忽或者错误,失去了对该段内存的控制,因而造成了内存的浪费. 或者可以说向系统申请分配内存进行使用(new),但是用完后不归还 ...

  9. 将读写锁放到共享内存中,实现进程之间对数据的读写访问控制

    代码 #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sy ...

最新文章

  1. android控制wifi状态
  2. 第六天2017/04/11(1:结构体链表基础和相关经典操作)
  3. 考研专业课计算机网络调剂,计算机网络信息中心2019年硕士研究生接收调剂信息公告...
  4. 网络编程 UDP套接字
  5. iOS如何实现语音播报及后台播放
  6. 为什么需要两个Survivor区?
  7. B2C和B2B之间有多大差距
  8. springbboot加密打包_Spring Boot 配置 Security 密码加密
  9. java实时更新权限_java – 如何使用Spring Security重新加载用户更新的权限
  10. PowerToys 又推新工具 Launcher,可以替代 Win+R
  11. cesium加载无人机倾斜摄影三维模型
  12. oracle 变长数组,oracle:变长数组varray,嵌套表,集合
  13. Shell编程—【03】数学运算expr与bc浮点数运算
  14. C++ (MFC)将字符串保存到指定目录下的文本中
  15. [matlab也能用来机器学习!?]保存工具箱模型并使用模型预测结果
  16. 如何检索国外的博士论文
  17. 4G手机网络免费开通高清语音VoLTE
  18. 【JavaScript】案例1:使用JS完成注册页面校验
  19. 华为企业交换机ACL经典案例
  20. 适用于监控大屏的websocket

热门文章

  1. 安卓权限Manifest.permission
  2. CIFAR-10模型训练python版cifar10数据集
  3. 安卓selinux关闭会怎样_Magisk面具官方推送Magiskv21.0版本,已支持安卓11机型获取root...
  4. 运营商打破默契,中国移动地方公司以优惠的形式推出低价5G套餐
  5. java中foreach用法_java程序中foreach用法示例
  6. 【博学谷学习记录】超强总结,用心分享|大数据之GROUPING
  7. TikTok数据分析 | 教你分析直播数据
  8. Fabric源码分析之九数据库存储源码分析leveldb
  9. 推荐几款开发常用的小插件
  10. java使用Graphics2D进行图片文字合成示例