hur.cn - 华软网

 热门搜索

vc++ 变量声明在一些复杂结构体之后 值会变化

  作者:未知    来源:网络    更新时间:2011/9/22
如题,我在头文件中定义了几个结构体,然后在结构体后面定义了一个BOOL变量 m_bLogin

在构造函数中初始化m_bLogin为FALSE,后面用到的时候突然发现m_bLogin为TRUE了,在这期间一直没有改变m_bLogin。
好像以前遇到这种情况,试着把m_bLogin定义放在结构体之前,果然没变化了。

这是怎么了
---华软 网友回答---
有地方内存访问越界了,把m_bLogin的内存地方给冲突了

---华软网友回复---
应该是这个原因  那有什么办法避免呢
---华软网友回复---
  class="deleted_message"> 该回复于2011-09-22 14:45:33被版主删除
---华软网友回复---
结构体里面有多个数组,这个真的有影响吗
---华软网友回复---
别用BOOL 用bool试试
---华软网友回复---
m_bLogin是结构的成员变量吗?
还是楼主说的在结构体的前面后面指的是定义的位置?
---华软网友回复---
代码出来,一定溢出了。
---华软网友回复---
引用楼主 liuchen110951 的回复:
如题,我在头文件中定义了几个结构体,然后在结构体后面定义了一个BOOL变量 m_bLogin

在构造函数中初始化m_bLogin为FALSE,后面用到的时候突然发现m_bLogin为TRUE了,在这期间一直没有改变m_bLogin。
好像以前遇到这种情况,试着把m_bLogin定义放在结构体之前,果然没变化了。

这是怎么了

越界了,重点检查结构体中有无数组。检查这些数组的下标;可能的话使用可变长数组(零大小数组,一种编程技巧),这样可以增加程序的灵活性;

---华软网友回复---
内存乱了
---华软网友回复---
引用 5 楼 lxhlxj 的回复:
别用BOOL 用bool试试


这两个有区别吗? 不是一样的?
---华软网友回复---
引用 6 楼 evi10r 的回复:
m_bLogin是结构的成员变量吗?
还是楼主说的在结构体的前面后面指的是定义的位置?


不是 m_bLogin是类的成员变量

开始是声明在结构体后面的  放在前面就没问题
---华软网友回复---
引用 7 楼 jennyvenus 的回复:
代码出来,一定溢出了。


结构体里面包含几个数组和其他的自定义结构体数组,开始m_bLogin在构造函数中为FALSE,后面点击按钮,m_bLogin=TRUE,然后从配置文件中读取数据,写入结构体中,再判断m_bLogin  此时成了FALSE
---华软网友回复---
跟踪下m_bLogin
看看什么时候被修改了
---华软网友回复---
引用 8 楼 tomsoft 的回复:
引用楼主 liuchen110951 的回复:
如题,我在头文件中定义了几个结构体,然后在结构体后面定义了一个BOOL变量 m_bLogin

在构造函数中初始化m_bLogin为FALSE,后面用到的时候突然发现m_bLogin为TRUE了,在这期间一直没有改变m_bLogin。
好像以前遇到这种情况,试着把m_bLogin定义放在结构体之前,果然没变化了。

这是怎么了

越……


结构体里有自定义的结构体数组和字符数组,下标应该是没越界 
---华软网友回复---
s-ice可以指定内存写时设置断点,跟踪下看是哪里写的m_bLogin。
或者自己检查结构指针,数组下标。
---华软网友回复---
不一样,一个是32bit,一个是8bit
BOOL是int的一个别名,宏定义转换的
引用 10 楼 liuchen110951 的回复:
引用 5 楼 lxhlxj 的回复:
别用BOOL 用bool试试


这两个有区别吗? 不是一样的?

---华软网友回复---
嗯 。。。。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。