您的位置:首页 > 编程语言 > C语言/C++

VC++debug与Release 的变量初始化问题

2013-05-17 09:28 232 查看
记录这篇文章的原因主要是在这几天遇到一个坑爹的问题,详情这样的:

为了学院游戏设计大赛,急急忙忙的赶了几天的代码,最后在Deadline前一天终于可以发布Release了

(惭愧,这也是我们学到现在第一次release),怎知道出来的游戏没有怪物跑过来。

为什么呢?Debug下完全没问题的啊?怎么Release就出问题了?



 

就像上图那样,等了半天怪都不出来。。。

和小组人员讨论和无数次试验后,我们把怪的位置直接放在屏幕中,发现怪出现以后不会动。

后来认真的检查了一遍有关怪移动的所有函数和变量,唯一发现的就是怪物类的怪物数据结构体里面Moveable变量在创建怪物的时候没有初始化

//怪物类的怪物数据结构体
struct MonsterDate
{bool Moveable; //怪物行走开关
int Step; //怪物步速
int DistanceToWindow; //怪物诞生地距离屏幕距离
int Type; //怪物种类
int Money; //怪物掉落金币
float HP; //怪物血量
float Power; //怪物攻击力
CSprite *Blood; //怪物血条精灵};
//创建一个新的怪物
pBloodShow=pSpriteManager->CreateSpriteNode(L"Blood",RES_TEX,D3DXVECTOR3(100,100,0),73,14,0,0,D3DXVECTOR3(0,0,0))
;DateTemp.DistanceToWindow=rand()%70+10;
DateTemp.Step= 3;
DateTemp.HP= 100;
DateTemp.Power= 5;
DateTemp.Money = 25;
DateTemp.Blood=pBloodShow;
DateTemp.Moveable= true;	//之前缺少的初始化语句
Monster=((CMyGameManager*)pSpriteManager)->CreateMonsterNode(L"DOG",RES_TEX,4,10,D3DXVECTOR3(0,0,0),85,86,0,0,D3DXVECTOR3(0,0,0),rectClient,DateTemp);
vPos=D3DXVECTOR3(rectClient.right+DateTemp.DistanceToWindow,rectClient.bottom-290,0);
pMonster->SetPos(vPos);
pMonster->Play();


初始化以后,果然怪就能动了!!

可是为什么Debug下没错呢?

总结,未初始化的bool变量,Debug下默认为True,Release下默认为False;

百度了一下。

发现VS里,debug与Release对未初始化的变量初始化动作是不同的。

网上一大堆有关的资料,目测有不少人中招啊,不过也不能怪别人,谁叫你不初始化变量 

——————————————————————————————————————————————————

参考资料原文地址:http://www.cnblogs.com/huaping-audio/archive/2008/08/23/1274833.html

——————————————————————————————————————————————————








                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: