У меня есть программа генетического алгоритма, все распределяется динамически с использованием векторов. Нигде число поколений или отдельных людей на поколение не установлено во время компиляции.
Я пробовал его, используя 500, 1000, 2000 поколений, он работает отлично. Тогда я попробовал 10000 поколений. Это дало мне отладочное утверждение не удалось, векторный индекс вышел за пределы диапазона при генерации 4966.
Я попробовал снова дважды с теми же параметрами, 10000 поколений, все работало нормально.
Я попробовал это еще раз, я получил ошибку в поколении 7565.
Странно, что иногда работает отлично, иногда я получаю ошибку. Особенно с учетом того, что все делается с использованием векторов.
Любые идеи о том, откуда может возникнуть проблема? Может быть, режим отладки по какой-то причине глючит?
Проблема возникает из-за повреждения стека или, скорее всего, из-за отсутствия доступа к индексу. Тот факт, что в некоторых случаях происходит сбой кода, указывает на то, что что-то не так. Если ваш код является многопоточным, проблема может заключаться в том, что если действия выполняются в заданном порядке, ваш код будет пытаться получить доступ к чему-либо за пределами вектора.
Мой совет, чтобы запустить ваш код, используя Valgrind и посмотрим, что он скажет. Обычно это помогает в решении подобных проблем.
Также обратите внимание на тот факт, что в некоторых случаях ваш код не дает сбоя, это не означает, что он работает идеально. Вы все еще можете иметь повреждение стека или подобное.
Других решений пока нет …