免费注册 查看新帖 |

Chinaunix

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

消息队列发送含指针的结构变量问题,请教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-06 23:07 |只看该作者 |倒序浏览
定义了一个结构
struct tag{
        int i;
        int *pi;
}
数据处理部分:
int i,*ii;
i=1234;
ii = new int[1];
memcpy(ii,&i,sizeof(int));
struct tag tmptag;
tmptag.pi = ii;
发送消息:
mq_send(test_mq_id,(char *)&tmptag,sizeof(tag),SIGRTMAX;
接受消息:
struct tag tagvalue;
mq_receive(test_mq_id,(char *)&tagvalue,100,&priop);
打印tagvalue.pi看到内存地址.可是*(tagvalue.pi)却是0,不是想要的1234
这是为什么啊?盼指教

论坛徽章:
0
2 [报告]
发表于 2008-01-07 02:13 |只看该作者
又是一个错误的问题。
不知道楼主小时候有没有学过一篇课文叫做《刻舟求剑》的?
lyyx 该用户已被删除
3 [报告]
发表于 2008-01-07 05:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2008-01-07 07:51 |只看该作者
3楼,我释放了内存,也是这样的结果.
2楼,还请告诉我该怎么做,谢谢

论坛徽章:
0
5 [报告]
发表于 2008-01-07 08:37 |只看该作者
发/收是在一个进程不?

若不是的法,两过的.pi指向的地址的内容肯定不一样不。

BTW:
        二楼的“刻舟求剑”真是形象.

[ 本帖最后由 zhhui2000 于 2008-1-7 08:40 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-01-07 08:50 |只看该作者
刻舟求剑真形象啊!
你接收线程中的struct tag tagvalue变量,tagvalue的指针*pi难道不需要分配内存?!

[ 本帖最后由 alazer 于 2008-1-7 08:51 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-01-07 09:09 |只看该作者
我分配了内存了
接受消息:
struct tag tagvalue;
mq_receive(test_mq_id,(char *)&tagvalue,100,&priop);
int *tmp;
tmp = new int[1];
memcpy(tmp,tagvalue.pi,sizeof(int));
当printf("value=%d\n",*tmp);结果仍然是0
哪里有问题啊

论坛徽章:
0
8 [报告]
发表于 2008-01-07 09:17 |只看该作者
原帖由 nari396 于 2008-1-7 09:09 发表
我分配了内存了
接受消息:
struct tag tagvalue;
mq_receive(test_mq_id,(char *)&tagvalue,100,&priop);
int *tmp;
tmp = new int[1];
memcpy(tmp,tagvalue.pi,sizeof(int));
当printf("value=%d\n",*t ...



你这样写,看一下呢:
struct tag tagvalue;
//int *tmp;
//tmp = new int[1];
tagvalue.pi = new int[1];
mq_receive(test_mq_id,(char *)&tagvalue,100,&priop);
printf......略

论坛徽章:
0
9 [报告]
发表于 2008-01-07 09:36 |只看该作者
效果一样的,
printf以后 *(tagvalue.pi)的数据仍然是0
5555,我在ubuntu702上用g++编译的.
能不能帮我编译看看

论坛徽章:
0
10 [报告]
发表于 2008-01-07 09:42 |只看该作者
5楼的正解,关键看你在发送前的那个指针有没有释放,如果释放了,肯定是不行的!在有就是如果不是一个进程,那自然也是不行的!
给个建议,看一下接收后的指针的内容是否和发送的指针的内容一样(这里指指针里存放的内存地址)!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP