Часть, где я получаю сообщение об ошибке (точнее, когда я получаю всплывающее окно с сообщением об ошибке отладки! Был вызван Abort()), — это часть, в которой я пытаюсь выполнить пересечение.
for (int i = 0; i < number_of_variables; i++)
{
int gene1 = gene_selection(rng);
std::cout << gene1 << " ";
if (gene1 == 0)
{
std::cout << "test 0";
new_individuals[k].chromosomes[0].at(i) = individuals[father].chromosomes[0].at(i);
}
else if (gene1 == 1)
{
std::cout << "test 1";
new_individuals[k].chromosomes[0].at(i) = individuals[mother].chromosomes[0].at(i);
}
}
Этого достаточно, чтобы отобразить «тест 0» или «тест 1», но на самом деле он не назначит гены отца/матери новому индивидууму.
Я пытался изменить строку, в которой старые гены присваиваются новому индивидууму, но, что бы я ни пытался, я не могу заставить это работать.
Если бы кто-нибудь мог показать мне, где (или как) я ошибаюсь, я был бы очень благодарен :)
Изменить: пройдя через отладчик, я получаю следующее
http://prnt.sc/b0iprq Необработанное исключение в .... в LearnCPP.exe: Исключение Microsoft C++: std::out_of_range в ячейке памяти.....
Другое редактирование: чтобы было ясно, именно в этой строке происходит прерывание:
new_individuals[k].chromosomes[0].at(i) = individuals[father].chromosomes[0].at(i);
k
иi
допустимые значения для доступа к элементам, когда вы достигнете этой строки. - person πάντα ῥεῖ   schedule 05.05.2016