问题
过去一年,我一直在使用C ++和Allegro 5.0.10在Microsoft Visual Studio 2010 Professional中编写游戏,并且它已经到了没有多大意义的地步在发布前做。但是,当我现在构建游戏时,我遇到随机错误。通过随机错误,我的意思是有时游戏运行没有问题,有时它开始做我根本没有写入代码的事情。这方面的例子包括在(0,0)显示整个精灵表;不要移动角色,而是改变他/她所面对的方向;将角色向一个方向移动,但以相反的方式显示它们(想想月球漫步)。我相当肯定它实际上并不是编码错误,因为这些是我写入代码的一些初始函数,而且它们一直有用。
问题
随机错误(程序/ IDE未检测到)的原因可能是什么,例如我上面在编码中提到的内容(无论是C ++还是Allegro本地)?
答案 0 :(得分:2)
听起来像是触动记忆的东西,它不应该是。使用像Valgrind这样的内存调试器来运行程序,并查找类似的问题。
Invalid write of size 8
任何无效的写入都可能导致您描述的行为。
答案 1 :(得分:0)
从您的评论中,分配变量,然后无法[赋值] 是很多可能的UB情况的一个正确示例。 Here is a larger (but still incomplete) list
了解未定义行为最重要的一点是,您无法对代码的作用做任何假设。即使是相同编译二进制文件中的相同代码。它可能会起作用,它可能会行为不端,可能会崩溃。
如果您使用的是C或C ++,则未定义的行为将使"无效;#34; 方法用于测试函数的正确性。