免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7100 | 回复: 20
打印 上一主题 下一主题

共享内存访问问题!不轻易发帖! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-25 11:05 |只看该作者 |倒序浏览
在LINUX下64位进行共享内存操作,SHMGET成功,SHMAT也返回正常,
但访问SHMAT返回的地址出现段错误!
试过很多方法未果!权限检查,KEY重建等等。

这些程序在AIX,SCO,LINUX32系统下都OK,到这里就不行了,怀疑是64位编译问题,有经验的朋友给予讨论指点!

论坛徽章:
0
2 [报告]
发表于 2009-05-25 11:16 |只看该作者
先读出来看看内容是不是正确的。

论坛徽章:
0
3 [报告]
发表于 2009-05-25 11:33 |只看该作者
用来保存地址的指针,长度够不够?

论坛徽章:
0
4 [报告]
发表于 2009-05-25 11:46 |只看该作者
shmctl都读了,用户,权限都正常的
另外楼上说的指针的长度够不够是什么概念呢?
总共8个字节LONG类型,用CHAR*  ,VOID*都取出来试,都不能访问,打印的地址是【0X968A5000】
调试OCRE的提示是Cannot access memory at address 0x7fbffff128
      0xffffffff968a5000 <Address 0xffffffff968a5000 out of bounds

就是SHMAT去除的地址,访问超界!没头绪!

论坛徽章:
0
5 [报告]
发表于 2009-05-25 11:49 |只看该作者
弄了这么多年的开发最烦的就是移植,什么平台之间,32到64之间的!
看来我体力跟不上了,呵呵

论坛徽章:
0
6 [报告]
发表于 2009-05-25 12:34 |只看该作者
看不到代码,看不到编译选项。
神也帮不了你。

论坛徽章:
0
7 [报告]
发表于 2009-05-25 13:19 |只看该作者
我感觉都是通用代码,在其他系统上都OK,只是把问题提出来看是否有人碰到过类似的问题,讨论指教一下。
粘贴那么长的代码,我看着都费劲啊
那就简单点吧:

ShmID = shmget(shm_key, Size, IPC_CREAT | SHM_PERM);
成功;IPCS显示正常
pShm = (char *)shmat(ShmID, (char *)NULL, 0);
成功;打印地址【0x968A5000]
  memcpy(stmp , pShm ,;// core  stmp[80]

编译时64位GCC无特殊选项只是链接一下ORACLE的clntsh库

楼上的朋友,还想要什么?

如果CU的朋友还有时间和兴趣,可以过来赐教一下!

若干年前曾经在CU提问过一个问题,但是未果(还是后来同事交流中无意提到了),难道这次?!:)

论坛徽章:
0
8 [报告]
发表于 2009-05-25 13:21 |只看该作者
呵呵 ,怎么 8和)是个笑脸啊?解释一下,memcpy拷贝了8字节

论坛徽章:
0
9 [报告]
发表于 2009-05-25 13:30 |只看该作者
把你的程序那几行有关的简化成一个可编译的程序,可运行并重现错误。
然后贴出来。

这是问你这类问题的标准做法。最容易得到帮助。

论坛徽章:
0
10 [报告]
发表于 2009-05-25 13:35 |只看该作者
用了oci?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP