【发布时间】:2013-03-19 22:01:38
【问题描述】:
我有一个遗传算法程序,一切都是使用向量动态分配的。编译时没有设置每代的代数或个体数。
我尝试了 500、1000、2000 代,运行完美。然后我尝试了10,000代。它给了我调试断言失败,第 4966 代向量下标超出范围。
我用同样的参数再试了两次,10000代,运行正常。
我又试了一次,7565代报错。
奇怪的是,有时它工作得很好,有时我得到错误。特别是考虑到一切都是使用向量完成的。
关于问题可能来自哪里的任何想法?也许调试模式有问题?
【问题讨论】:
-
问题来自您的代码中的错误。如果没有看到您的任何代码,很难猜出它可能是什么。
-
您是否对向量进行零初始化?如果没有,您可能会根据随机数据做出决策。也许使用 Valgrind?
-
“奇怪的是,有时它工作得很好,有时我得到错误” - 不,不是。我的错误有很多。请给我们看代码。
-
您是否尝试过在调试器中运行您的代码?您是否尝试过使用内存检查器,例如valgrind?
-
这可能是由于向量内存的重定位导致的,这仅在特定大小上触发,这取决于您的 STL。确保您没有假设手头的数据在可能使迭代器、引用无效的向量操作中有效。