社区
C++ 语言
帖子详情
等号两边,赋值后不相等
zidane_yubo
2011-07-15 01:10:34
CFSSessionManagerData *pTmp = (CFSSessionManagerData *)(pTmp->m_pSessionMmsg);
赋值后,用GDB查看
指针pTmp 的值(为0x640770)不等于 pTmp->m_pSessionMmsg(0x64077000000000)
请问有高手知道不?是否是前面有内存问题引起的?
...全文
1860
33
打赏
收藏
等号两边,赋值后不相等
CFSSessionManagerData *pTmp = (CFSSessionManagerData *)(pTmp->m_pSessionMmsg); 赋值后,用GDB查看 指针pTmp 的值(为0x640770)不等于 pTmp->m_pSessionMmsg(0x64077000000000) 请问有高手知道不?是否是前面有内存问题引起的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
33 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
一叶之舟
2011-07-20
打赏
举报
回复
pTmp->m_pSessionMmsg(0x64077000000000)
应该是一个64位的值,转换后数据截断了
0153
2011-07-20
打赏
举报
回复
不一样就对了,编译器给了你需要的,就这么简单。
你的pTmp->m_pSessionMmsg应该指向一个很复杂的类,而CFSSessionManagerData是这个复杂的类的基类之一,因此很复杂的类强转成基类很可能发生地址改变,但这恰恰是正确的,因为编译器确实把你需要的基类的地址给抽出来给你了,你对基类的任何调用都将是正确的。
山里来的鱼
2011-07-20
打赏
举报
回复
[Quote=引用 12 楼 zidane_yubo 的回复:]
引用 11 楼 demon__hunter 的回复:
多继承或虚拟继承this调整,可以导致=两边不相等
是的,程序是用来多继承,请问这个问题应该怎么解决呢?
谢谢
[/Quote]
用试过dynamic_cast么?
liuxu93466
2011-07-19
打赏
举报
回复
CFSSessionManagerData *pTmp = (CFSSessionManagerData *)(pTmp->m_pSessionMmsg);
CFSSessionManagerData *pTmp = NULL;
pTmp=(CFSSessionManagerData *)(pTmp->m_pSessionMmsg);
这样应该没错了吧
titian2046
2011-07-19
打赏
举报
回复
比较初级的错误
CFSSessionManagerData *pTmp = (CFSSessionManagerData *)(pTmp->m_pSessionMmsg);
你都把pTMP本身给改了,赋完值当然不一样。
貌似 a=a-1 然后 a<>a-1
双杯献酒
2011-07-19
打赏
举报
回复
你先 sizeof(CFSSessionManagerData *) 和 sizeof(pTmp->m_pSessionMmsg) 看看是不是都是4或者8
梅名智
2011-07-19
打赏
举报
回复
*pTmp是个32位值吧
pTmp->m_pSessionMmsg是64位吧,你确定他的定义是指针。sizeof看看两个长度是不是一样的
gdfbjt4
2011-07-19
打赏
举报
回复
看不懂啊看不懂,新手菜鸟表式鸭梨很大
yrnaaa
2011-07-19
打赏
举报
回复
每天回帖即可获得10分可用分!
点点灵犀
2011-07-19
打赏
举报
回复
CFSSessionManagerData *pTmp = NULL; //指针为空
pTmp=(CFSSessionManagerData *)(
pTmp->m_pSessionMmsg
);//这样访问空指针中的数据一定会出现访问异常
CFSSessionManagerData *pTmp = (CFSSessionManagerData *)(pTmp->m_pSessionMmsg);//这句话明显有问题。你在使用pTmp->m_pSessionMmsg时,pTmp是未初始化的。
gin041013
2011-07-18
打赏
举报
回复
这是正确的,类型转换的指针偏移所致。
赵4老师
2011-07-15
打赏
举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
zidane_yubo
2011-07-15
打赏
举报
回复
[Quote=引用 20 楼 interlace2010 的回复:]
你确定(pTmp->m_pSessionMmsg)是(CFSSessionManagerData *)这个类型吗?
[/Quote]
是的,而且不管怎么样,都已经进行了指针的强制转换
interlace2010
2011-07-15
打赏
举报
回复
你确定(pTmp->m_pSessionMmsg)是(CFSSessionManagerData *)这个类型吗?
菜鸟一个
2011-07-15
打赏
举报
回复
头一次遇到
zidane_yubo
2011-07-15
打赏
举报
回复
没人遇到过这个问题?
zidane_yubo
2011-07-15
打赏
举报
回复
同一个系统的程序的指针,怎么会不一样呢?
同为32 或者62位
majia2011
2011-07-15
打赏
举报
回复
pSessionMmsg是个32位值吧
赋值给pTmp是个64位指针,还用的强转,剩下那32位谁给的
zidane_yubo
2011-07-15
打赏
举报
回复
其他的指针赋值是好的,就这个突然在后面加了好多零
郁闷
majia2011
2011-07-15
打赏
举报
回复
把火车上的东西搬到卡车上
火车和卡车就必须一样吗?又不是变形金刚
加载更多回复(13)
详解Python3序列
赋值
、序列解包
上节我们提到解决
赋值
中
等号
两边
参数不一致的方法可以通过切片,但在Python3中我们可以利用特定的语法更加方便的处理这种情况,如下示例。 当带 * 出现在结尾间时 L = [1, 2, 3, 4, 5] a, *b = L print(a, b) 示例结果: 1 [2, 3, 4, 5] 我们可以看到a匹配了列表中第一个元素值,而b匹配了后面所有的内容,并且为列表。即当我们利用带 * 符号匹配时,就可以解决
赋值
时
等号
两边
元素数量不
相等
的情形,那么这种带 * 的处理方式都有哪些详细的使用场景和用法呢? 当带 * 出现在中间时 L = [1, 2, 3, 4, 5] a, *b, c = L
对python中for、if、while的区别与比较方法
如下所示: if应用举例: #if 若条件成立,只执行一次 #if 条件:如果条件成立,执行条件后的代码块内容,不成立,直接跳过代码块 #判断如果年龄age小于18,输出未成年 #=一个
等号
表示
赋值
的意思 ==双
等号
判断
等号
两边
的值是否
相等
if age==18: print('未成年') #两种情况的判断 #如果age小于18 输出未成年,否则输出成年人 #如果条件成立,执行条件后的代码块内容,条件不成立,执行else后的代码块内容,有且只会执行其中某一个代码块 if age<18: print('未成年') else: print('已成年') #三种三种以上的情况判断 #如果ag
赋值
语句实用PPT学习教案.pptx
赋值
语句实用PPT学习教案.pptx
高一数学变量与
赋值
2PPT学习教案.pptx
高一数学变量与
赋值
2PPT学习教案.pptx
2020学年高中数学 第2章 2.2变量与
赋值
课时作业(含解析)北师大版必修3.doc
2020学年高中数学 第2章 2.2变量与
赋值
课时作业(含解析)北师大版必修3.doc
C++ 语言
65,176
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章