笔记:shmat 共享内存中,如果包含指针,指针数据出错的原因

本文探讨了在使用共享内存时遇到的指针数据错误问题。建议在共享内存中避免使用指向外部的指针,即使是指向内部的指针也可能因映射地址不同导致错误。解决方案是使用相对于共享内存首地址的偏移量来替代指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文内容总结自网络:

http://www.ixpub.net/thread-1446958-1-1.html

http://topic.youkuaiyun.com/u/20090428/10/79fd9da9-2e16-4a46-943a-9fb3dde2a183.html

 

1、共享内存中用指针一般是用对首地址的偏移量,这样就好了,每个进程映射的地址不一样

 

2、交换用的数据中,永远都不要出现指针。
    什么是交换用的数据?
    磁盘文件、网络封包、共享内存、消息队列、管道,等等等等。

 

3、可以使用,但是那个指针指向的内存也必须是在那部分共享内存中的

 

4、共享内存里的数据结构成员不要用指针,要用偏移量,shmat得到的地址不能保证一样的

 

本人总结:

    共享内存中不要出现指向共享内存外的指针,即使是指向共享内存中的指针也不要出现,因为共享内存中的指针值是对首地址哦偏移,不同程序将该段共享内存映射到本程序时,共享内存地址可能不一样,从而造成相对首地址偏移不一样,最终导致指针指向的地址不一样。

   所以,在共享内存使用指向共享内存的指针时,使用偏移量来代替(相对共享内存首地址的偏移量);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值