我正在构建一个遗传算法,我遇到了问题。这是一个内存问题,我仍然是新的和malloc的东西,我需要使用它吗?如果有人能解释错误,我将不胜感激。在第4次增加K之后,我得到EXC_BAD_ACCESS错误(代码= 1,地址= 0x10))。它陷入了
tmp.at(0)= it_1-> first;
void Population::Poppairing(int j)
{
int rand_num = 0;
int rand_per = 0;
for (unsigned long i = select.size(); i-=2;)
{
rand_per = rand()%100;
if(j < rand_per)
{
auto temp_1 = parents.at(select.at(i)).get_genome();//auto here is unordered map
auto temp_2 = parents.at(select.at(i-1)).get_genome();
auto it_1 = temp_1.begin();//here it is and iterator
auto it_2 = temp_2.begin();
for(int k = 0;k < no_rule; k++)
{
rand_num = rand() % no_in;
advance(it_1,k);
advance(it_2,k);
vector<string > tmp(2);
for(int l = 2; l--;)
{
tmp.at(0) = it_1->first;//father
tmp.at(1) = it_2->first;//mother
tmp.at(l).erase((tmp.at(l).begin()+rand_num),tmp.at(l).end());
tmp.at((!l)).erase(tmp.at((!l)).begin(),(tmp.at((!l)).end()-((tmp.at(!l)).size()-rand_num)));
children.at(i-l).set_input_pos((tmp.at(l)+tmp.at(!l)),k);
children.at(i-l).set_output_pos((unsigned char)(parents.at(i-l).get_genome().begin()->second),k);
}
tmp.clear();
}
children.at(i).re_initialising_map();
children.at(i-1).re_initialising_map();
}
else
{
children.at(i) = parents.at(select.at(i));
children.at(i-1) = parents.at(select.at(i-1));
}
}
}
答案 0 :(得分:0)
我修复了它,使用advance
iterator
中的stl
似乎存在问题。只是在k的末尾增加了it_1和2 for循环。