向量的下标有时超出范围

时间:2013-03-19 13:54:57

标签: c++ vector subscript

我有一个遗传算法程序,所有内容都是使用向量动态分配的。在编译时,每代的代数或个体数量都没有设定。

我尝试使用500,1000,2000代,它运行完美。然后我尝试了10,000代。它给了我调试断言失败,向量下标超出了第4966代的范围。

我用相同的参数再次尝试了两次,10,000代,它运行良好。

我再次尝试了,我在第7565代得到了错误。

奇怪的是,有时它完美无缺,有时我会得到错误。特别是考虑到一切都是使用矢量完成的。

关于问题可能来自哪里的任何想法?也许出于某种原因,调试模式是错误的?

1 个答案:

答案 0 :(得分:1)

问题来自堆栈损坏,或者很可能来自索引越界访问。有些情况下,您的代码崩溃表明存在错误。如果您的代码是多线程的,那么问题可能是因为如果以给定的顺序执行操作,您的代码将尝试访问某个向量范围之外的内容。

我的建议是使用valgrind运行您的代码,看看它会说些什么。通常它有助于解决类似的问题。

另请注意,有些情况下,您的代码没有崩溃,这并不意味着它完美无缺。您可能仍有堆栈损坏或类似情况。