随笔 - 132  文章 - 51  trackbacks - 0
<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(7)

随笔分类

随笔档案

文章分类

文章档案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新评论

阅读排行榜

评论排行榜

最近调试手机游戏 调试项目OK没问题 F5运行也没问题 电脑上window平台也运行正常 结果安装到手机android平台上角色就不动了,头立刻就大了,android平台和windows平台运行结果不一致,加上手机调试困难需要通过日志来判断运行情况,怀疑过跨平台配置文件读取失败的问题,开始各种怀疑,各种验证...

后来同事说运行打包的release版本也会出现同样的问题...

经测试 调试时选择"运行不调试"或直接双击exe文件发现报错,由此推出F5调试和双击结果不一致,那这样的原因很明显了,原因不外乎这几条:

1)变量没有初始化就直接拿去用了:调试程序时,强大的VS编译器会帮你做一些初始化的工作,将为初始化的变量置“0”,结构变量置为NULL等,但是在双击运行时,编译器不会这么做,因此要注意一些变量记得初始化,而且尽量少用全局变量。
2)“VS的编译器是极其牛X的,调试时候用的内存、堆栈等等和外部运行时候的结构稍有差异,并且正确率更高——事实也确实如此”,因此code代码要有个良好的习惯:变量记得一定要初始化!“变量没赋值的情况下F5,debug和release是有差别的,一个版本会清零,另一个不会这么做。”
3)自己申请的内存,用完后记得释放,不然也可能会引起这类错误。
4)不要忽视调试时的warning,虽然很多时候你无视他的存在不会带来什么影响,但是某一天你会被他伤到的,他们指示你程序潜在错误的“利器”,所以尽量多的将warning消除。


我的原因就是为角色添加了一个新成员变量m_bMoveEnable 却没有初始化, 在android平台有时候初始化为false, 导致角色出生时不移动这样严重的BUG

有人说 bool变量不是会默认初始化为xx么? 是,可能强大的VS会在你调试的时候帮你初始化,那运行时呢? 还有跨平台默认的初始化都是未知的...

所以我们要养成初始化的好习惯,否则现在没有发生问题,未来的未来,可能会导致严重的BUG,而浪费我们巨大的时间去解决,甚至是无从解决...
posted on 2012-07-31 08:43 风轻云淡 阅读(1367) 评论(1)  编辑 收藏 引用 所属分类: C++

FeedBack:
# re: C++学习笔记02 VS调试和双击运行或Release的结果不一致  2013-03-19 23:54 seagle
请问,C++编译后的程序可以在android平台上解析执行吗?

能否说下怎么实现的?  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理