求解: 成员变量的值会自动改变,为什么会这样?

子宜 2013-03-06 06:10:55

在我写的程序中有类A,A的一个成员变量int m_iWidth;
程序基于对话框,对话框有一个A的对象m_A;

在A的构造函数里对 m_iWidth 赋值,令m_iWidth = 160;

但在对话框出现后,立刻点击对话框的一个按钮,在按钮的消息响应函数里调用m_A的一个成员函数F();
F()会使用到A的一个成员变量int m_iWidth,但此时debug发现m_iWidth变为-858993460;

想问下各位大神,为什么有的类成员变量的数值会自行改变的原因是什么?都快被这个整疯了
...全文
460 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你的类A的对象和这个按钮的父窗口之间是什么从属关系?
子宜 2013-03-11
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
对话框对象m_A估计被释放了吧
不会被释放吧,因为有两个值m_iWidth, m_iHeight,第二次调用的时候发现m_iWidth错误,但m_iHeight正确
子宜 2013-03-11
  • 打赏
  • 举报
回复
引用 2 楼 keith_cheung 的回复:
用断点跟踪一下看看,从值来说,好象是一个没初始化的值。
赋值是在类的构造函数里进行的,用断点看确实赋值了。但是等再次调研那个的时候值就变了
子宜 2013-03-11
  • 打赏
  • 举报
回复
引用 1 楼 bing87496988 的回复:
能给个源码么,怎么感觉你这个值像是这个对象被销毁了呢?
代码太庞大了,感觉像是内存被覆盖了,因为有两个成员变量m_iWidth, m_iHeight(表示图像的宽与高),两个一起赋值的,等响应消息时m_iWidth就变了,而m_iHeight还是之前正确的值,搞不懂啊
  • 打赏
  • 举报
回复
在整个工程搜索 m_iWidth 看看有哪些地方会对他进行修改 我也倾向于变量未初始化,这么做可以反向证实这个想法
dreamrains 2013-03-11
  • 打赏
  • 举报
回复
这个不知道怎么弄啊!!!!!!
w_xei 2013-03-11
  • 打赏
  • 举报
回复
应该是没有初始化
子宜 2013-03-11
  • 打赏
  • 举报
回复
引用 8 楼 ivrainy 的回复:
在构造m_a完成之后获取到他的成员变量m_iWidth的地址 然后添加数据断点 查看一下 数据是在什么地方改变的就可以了
在点击按钮后,变了,但是之前也没做什么啊
子宜 2013-03-11
  • 打赏
  • 举报
回复
引用 15 楼 dcmilan 的回复:
你的类A的对象和这个按钮的父窗口之间是什么从属关系?
关系就是基于对话框程序的对话框类中,定义了A类的一个成员变量
LiuYinChina 2013-03-10
  • 打赏
  • 举报
回复
用数据断点!
tingyuyiye01 2013-03-08
  • 打赏
  • 举报
回复
可能情况就是: 1、没有初始化 2、调用的时候,变量已经过了生存期,变量已经失效了
zhuoxuan216 2013-03-07
  • 打赏
  • 举报
回复
自己调试的时候一定要多设断点,单步调试下,看到了哪一步值变啦。
信阳毛尖 2013-03-07
  • 打赏
  • 举报
回复
你在对话框的初始化窗口函数断点一下,看看对话框类中的m_A对象创建出来了没
信阳毛尖 2013-03-07
  • 打赏
  • 举报
回复
我怎么感觉是你的m_A对象还没有创建出来呢?
jimette 2013-03-07
  • 打赏
  • 举报
回复
m_iWidth变为-858993460; \ 是没有初始化把
jimette 2013-03-07
  • 打赏
  • 举报
回复
查找一下看都在哪里使用了!
ivrainy 2013-03-07
  • 打赏
  • 举报
回复
在构造m_a完成之后获取到他的成员变量m_iWidth的地址 然后添加数据断点 查看一下 数据是在什么地方改变的就可以了
oyljerry 2013-03-06
  • 打赏
  • 举报
回复
对话框对象m_A估计被释放了吧
keith_cheung 2013-03-06
  • 打赏
  • 举报
回复
用断点跟踪一下看看,从值来说,好象是一个没初始化的值。
小兵_小白 2013-03-06
  • 打赏
  • 举报
回复
能给个源码么,怎么感觉你这个值像是这个对象被销毁了呢?
LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 当你在windows下开始运行LINGO系统时,得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO中求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输问题。产销单位运价如下表。 单 位 销地 运 价 产地 B1 B2 B3 B4 B5 B6 B7 B8 产量 A1 6 2 6 7 4 2 5 9 60 A2 4 9 5 3 8 5 8 2 55 A3 5 2 1 9 7 4 3 3 51 A4 7 6 7 3 9 2 7 1 43 A5 2 3 9 5 7 2 6 5 41 A6 5 5 2 2 8 1 4 3 52 销量 35 37 22 32 41 32 43 38 使用LINGO软件,编制程序如下: model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮 即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。 2.2 什么是集 集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性可以预先给定,也可以是未知的,有待于LINGO求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。 LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。 一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。 2.3 模型的集部分 集部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在集部分事先定义。集部分以关键字“sets:”开始,以“endsets”结束。一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧