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