免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: sxf2000
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2009-05-25 16:34 |只看该作者
重写了一个简单例子,居然OK!!!!!!我真的感觉自己衰老了,以为原来的函数库都身经百战没问题!
都不愿意重新写点东西,发现问题了
结果如下:(还要多谢思一克同志的提醒!呵呵,)
1
......
char *pshm=NULL;
pshm=shmat(ishmid,0,0)调用返回访问没问题;


2
而封装一个函数shmattach(ishmid)
{
    char *pshm=NULL;
    pshm=shmat(ishmid,0,0);

   return pshm;
//成功的,但 返回的内存就不能访问!?不应该!继续!
}
原型声明不是白定义的!呵呵
依稀记得C开发库函数的标准声明规范,于是弄个函数原型声明在头文件里,执行就不CORE了!原型声明不是白定义的!呵呵
再次觉得自己人老珠黄了!一些规范都淡忘了!一声叹息!

用函数原型声明虽然可以解决此问题,不过深层次的原因也希望大家能挖掘分析一下,是不是由于程序的代码地址段问题呢?
有兴趣的朋友可以交流交流!或者另开主题讨论!

论坛徽章:
0
12 [报告]
发表于 2009-05-25 16:48 |只看该作者
原帖由 sxf2000 于 2009-5-25 16:34 发表
重写了一个简单例子,居然OK!!!!!!我真的感觉自己衰老了,以为原来的函数库都身经百战没问题!
都不愿意重新写点东西,发现问题了
结果如下:(还要多谢思一克同志的提醒!呵呵,)
1
......
char *pshm=NU ...


许多类似问题都是你原型包含缺少造成的。

论坛徽章:
0
13 [报告]
发表于 2010-05-26 11:13 |只看该作者
有谁知道这个问题的本质原因么?

我不用函数,比如:

struct mystruct* pmystruct;
void *pshm=NULL;
pshm=shmat(ishmid,0,0);

pmystruct = (struct mystruct*)pshm;
也是内存不可访问。

但是我下面这么写就可以访问:

struct mystruct* pmystruct;
pmystruct=shmat(ishmid,0,0);

论坛徽章:
0
14 [报告]
发表于 2010-05-26 11:36 |只看该作者
8年为一帖子啊

论坛徽章:
0
15 [报告]
发表于 2010-05-26 13:03 |只看该作者
难道gcc for 64将地址0x968A5000扩展成了0xFFFF FFFF 968A5000?应该是0x0000 0000 968A5000!

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

这是问你这类问题的 ...
思一克 发表于 2009-05-25 13:30



    学习大牛.

论坛徽章:
0
17 [报告]
发表于 2010-05-26 13:17 |只看该作者
楼猪, 你memcpy是要往哪copy啊

就你现在的代码, stmp 申请空间了吗

论坛徽章:
0
18 [报告]
发表于 2010-05-26 13:25 |只看该作者
出core要-S输出汇编来分析,光看源程序你知道编译器怎么优化的?局部变量存的临时指针放在栈里的,函数返回时变量值就成未定义了,临时变量的转存进返回值寄存器的时机很重要。
或者你用char**出参来取代返回值传指针,只返回int型的错误信息。

论坛徽章:
0
19 [报告]
发表于 2010-05-26 14:40 |只看该作者
有谁知道这个问题的本质原因么?

我不用函数,比如:

struct mystruct* pmystruct;
void *pshm=NULL;
pshm=shmat(ishmid,0,0);

pmystruct = (struct mystruct*)pshm;
也是内存不可访问。

但是我下面这么写就可以访问:

struct mystruct* pmystruct;
pmystruct=shmat(ishmid,0,0);


一直想不通是为什么, 32位和64位下都有这个问题。

论坛徽章:
0
20 [报告]
发表于 2010-05-26 23:14 |只看该作者
用if ((void*)-1 == pshm)看看shmat是否成功
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP