我有一个遗传算法程序,一切都是使用向量动态分配的。在编译时没有设置每代的代数或个体数。
我尝试了 500、1000、2000 代,运行完美。然后我尝试了10,000代。它给了我调试断言失败,第 4966 代向量下标超出范围。
我用相同的参数再次尝试了两次,10,000 代,它运行良好。
我又试了一次,我在第 7565 代得到了错误。
奇怪的是,有时它工作得很好,有时我得到错误。特别是考虑到一切都是使用向量完成的。
关于问题可能来自哪里的任何想法?也许由于某种原因调试模式有问题?
问题来自堆栈损坏或很可能来自索引越界访问。在某些情况下您的代码崩溃表明存在问题。如果您的代码是多线程的,则问题可能是因为如果以给定的顺序执行操作,您的代码将尝试访问超出向量范围的内容。
我的建议是使用valgrind运行您的代码,看看它会说什么。通常它有助于解决类似的问题。
另请注意,在某些情况下您的代码不会崩溃,这并不意味着它可以完美运行。您可能仍然有堆栈损坏或类似情况。