共享内存中出现段错误

简述

关于共享内存中,另一个程序访问时出现段错误的问题,后来在一篇博文中找到了问题出错我原因
共享内存常见段错误

1、共享内存相关使用

Linux进程间通信——使用共享内存

2、 使用上错误示例

从上文的链接上,可以大概的了解到共享内存的使用,这里就只拿出使用的共享内存的结构体。

struct date{
  int flag;
  char *buf;
};
//flag表示是否写入内容,buf指针则指向一块内存。

在使用这个结构体时,写入端按正常情况将对应内容写入,写入结果都是正确的,没有任何报错信息。但是读取端在读取信息时,发现读取buf时出现段错误。

3、正确示例

struct date{
  int flag;
  char buf[4];
};

出现错误时,对结构体进行修改,不再使用指针来作为共享内存的结构体,而是使用一个静态数组。

4、思考

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

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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值