【发布时间】:2011-04-04 21:28:11
【问题描述】:
我目前正在编写roguelike,自然会使用大量随机数生成。
我遇到的问题是,如果我“过热” rand();我的程序会崩溃。
如果我每帧只生成 20 个左右的整数,那很好……但是当随机数的数量达到数百个时,程序就会崩溃。我制作的每一帧越多,它崩溃的越早......这让我相信发生了一些堆积。
我已经完成了测试,并且在 20 rand();每帧调用一次,它将以最大速度连续运行 24 小时而不会崩溃。三倍,它没有十分钟。
如果我把 srand();在初始化中,我可以在锁定之前生成数千个随机数 - 但如果我输入 srand();在框架本身内,我制作了大约 2-8 帧。如果重要的话,我会使用 time(null) 来播种。
我调用 rand() 的频率越高;越早崩溃。
帮助?
【问题讨论】:
-
您确定它在
rand()实现中崩溃了吗?您是否使用调试器来确认此行为?即使是这样,除非您可以在一个简单的案例中重现该问题 (int main(void) {while(1) rand(); }),否则我不会怀疑 rand 是您的问题。 -
向我们展示最小的失败示例
-
你是从多个线程调用 rand 吗?
-
您是否能够在调试器下重现此问题并查看崩溃的位置/原因?或者,如果使用调试器不切实际,您是否已将其配置为创建故障转储,然后检查以查看故障在哪里?您是否正在注销数组的末尾,或者有一个悬空指针等可能会破坏内存并间接导致这些库例程崩溃?
-
您可能在代码的其他地方做了一些调用未定义行为的事情。你能在一段代码中重现崩溃,除了重复调用 rand() 和 srand() 之外什么都不做?