2013-03-19 5 views
0

У меня есть программа генетического алгоритма, все распределяется динамически с использованием векторов. Нигде число поколений или отдельных лиц на поколение не установлено во время компиляции.Подпись вектора иногда за пределами допустимого диапазона

Я пробовал его с использованием 500, 1000, 2000 поколений, он отлично работает. Затем я попробовал 10 000 поколений. Это дало мне отладочное утверждение, неудачный, индекс вектора вышел из диапазона в генерации 4966.

Я попытался снова дважды с теми же параметрами, 10 000 поколений, все прошло отлично.

Я попробовал это еще раз, я получил ошибку при генерации 7565.

Это странно, что иногда он отлично работает, иногда я получаю сообщение об ошибке. Особенно учитывая, что все делается с использованием векторов.

Любые идеи о том, где могла возникнуть проблема? Может быть, режим отладки по какой-то причине глючит?

+6

Проблема возникает из-за ошибки в коде. Не видя какого-либо из вашего кода, трудно догадаться, что это может быть. – john

+0

Вы ноль-инициализируете свои векторы? Если нет, вы можете принимать решения на основе случайных данных. Возможно, использовать Вальгринда? – RichieHindle

+2

«Странно, что иногда это работает отлично, иногда я получаю ошибку» - нет, это не так. У меня много чего с моими ошибками. пожалуйста, покажите нам код. –

ответ

1

Проблема возникает из-за повреждения стека или, скорее всего, из индекса за пределами доступа. Тот факт, что есть случаи, когда ваш код падает, указывает на то, что что-то не так. Если ваш код многопоточен, проблема может быть связана с тем, что если действия выполняются в данном порядке, ваш код попытается получить доступ к чему-то за пределами для вектора.

Мой совет - запустить код с помощью valgrind и посмотреть, что он скажет. Обычно это помогает в решении подобных проблем.

Также обратите внимание на то, что бывают случаи, когда ваш код не разбивается, это не значит, что он работает отлично. Вы все еще можете иметь повреждение стека или подобное.

Смежные вопросы