免费注册 查看新帖 |

Chinaunix

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

const类型的引用被离奇的改变??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-15 09:50 |只看该作者 |倒序浏览
我的代码的结构大致如下:
// CMsgHead 类型的指针

CMsgHead *msg = ****;
/*此处用 p msg 打印出来的值为:0x816ec60*/

//receive_msg的声明为:

//int receive_msg(const CMsgHead & msg, char *buf);

receive_msg(*msg, buf);
/*此处用 p msg 打印出来的值为:0x8000000*/


receive_msg里面也根本没有代码对它进行改变,用watch命令监视这个变量,也没有发现有被改变的地方

但却出现了这样的情况,是什么原因造成的??? 真是奇怪了

论坛徽章:
0
2 [报告]
发表于 2009-01-15 09:52 |只看该作者
你打印的是两个不同的指针地址。。。而不是指针指向变量的地址

论坛徽章:
0
3 [报告]
发表于 2009-01-15 10:03 |只看该作者
? 谢谢
我想打印的是msg的值
msg是一个指针,指向了一个CMsgHead类
没有地方对msg进行改变,但后来它却指向了另外的一个地址

这让我很疑惑

论坛徽章:
0
4 [报告]
发表于 2009-01-15 10:15 |只看该作者
那你打印*msg试试

论坛徽章:
0
5 [报告]
发表于 2009-01-15 10:21 |只看该作者
第一次打印是可以的

第二次打印的时候会出现这样的错误信息:
Cannot access memory at address 0x8000000

论坛徽章:
0
6 [报告]
发表于 2009-01-15 10:24 |只看该作者
你第二次是在什么地方打印msg的?
函数里面还是执行完函数之后啊?不行的话上代码

论坛徽章:
0
7 [报告]
发表于 2009-01-15 10:28 |只看该作者
是在函数执行之后

论坛徽章:
0
8 [报告]
发表于 2009-01-15 10:31 |只看该作者
receive_msg的代码如下:


  1. size_t msg_length = msg.msg_length() - 20;    //这个msg就是传进来的CMsgHead的引用
  2. int result = peer_stream.recv_n(buf, msg_length);
  3. result = (result == msg_length) ? 0 : -1;

  4. return result;
复制代码


谢谢!

论坛徽章:
0
9 [报告]
发表于 2009-01-15 10:39 |只看该作者
你上的代码太少。。。。
难道你的msg已经出了其作用范围了(销毁)?

论坛徽章:
0
10 [报告]
发表于 2009-01-15 10:41 |只看该作者
这个函数执行之前的值和执行之后的值不一样
应该是在这个函数里面改变的

其实这个函数就这几行代码

所以感觉很奇怪~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP