非数值随机误差
Non-numerical Random Errors
问题
在过去的一年里,我一直在使用c++和Allegro 5.0.10在Microsoft Visual Studio 2010 Professional中编写一款游戏,并且在发布之前已经没有多少事情要做了。然而,当我现在创建游戏时,我遇到了随机错误。我所说的随机错误是指有时候游戏运行时没有问题,有时候它开始做一些我根本没有写进代码的事情。这方面的例子包括在(0,0)处显示整个精灵表;不移动角色,但改变他/她面对的方向;将角色朝一个方向移动,但显示他们朝相反的方向行走(想想太空步)。我相当确定这实际上不是编码错误,因为这些是我写在代码中的一些初始函数,它们一直在工作。
是什么可能是一些原因随机错误(不被程序/IDE检测),如我在上面提到的编码(无论是本地c++或Allegro)?
听起来好像有什么东西触动了不该触动的记忆。使用内存调试器(如Valgrind)运行程序,查找以下问题:
Invalid write of size 8
任何无效的写都可能导致您所描述的行为。
从你的评论,分配一个变量,然后失败[分配一个值]它是一个正确的例子许多可能的UB情况。下面是一个更大的(但仍然不完整)列表。
理解未定义行为最重要的一点是,你不能对代码将要做什么做任何假设。即使是编译后的二进制文件中的相同代码。它可能工作,它可能出错,它可能崩溃。
如果您使用的是C或c++,未定义行为将使"它们一直有效"方法无效,以测试函数的正确性。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- 字符串-C++后显示的随机字符
- 为什么在浮点中从大到小会引入更多的误差
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- 使用std::mt19937从字符串中返回一个随机单词
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 如何在C++中高效地构造随机骰子
- 在类中使用随机生成器时出现性能问题
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 将字符随机转换为大写的函数
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何生成一个随机的 n 位数,其中 n 是任意的
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 如何使用要传递给 mt19937 的可选随机种子参数设计函数
- 在C++中随机生成 20 个非重复数字
- GCC:随机构建导致执行期间分段错误
- 如何在C++中随机采样具有给定平均值和标准误差的正态分布
- 非数值随机误差