【发布时间】:2017-10-26 08:55:08
【问题描述】:
我和我的伙伴刚刚遇到了一个我们还无法解决的问题。
我们有两个班级,solution 和 generation。
solution 有很多属性,generation 有一个vector<solution> pool 等属性。
生成类有一个generatePool函数:
void generation::generatePool(int initsize){
for(int i = 0; i < initsize; i++){
printf("%d\n", i);
pool.push_back(get_randomized_solution(args));
}
}
其中get_randomized_solution 本身返回一个解决方案。问题是,程序编译但在push_backline 处崩溃(分段错误)
我们已经在pool 向量上尝试了resize 和reserve,我们也尝试过使用指针...但它仍然崩溃,现在谷歌(和SO)似乎已经没有想法来帮助我们.我们还重新定义了solution& solution::operator=(const solution&) 和solution::solution()(没有参数)构造函数,它基本上返回一个空的solution。您认为问题出在哪里?
编辑:
这是get_randomized_solution 方法:
solution get_randomized_solution(int size, int rcap, int rcom, bool randomized){
solution sol = solution(size, rcap, rcom);
vector< pair<int,int> > cibles;
for(int i = 0; i < size; i++){
for(int j = (i==0) ? 1 : 0; j < size; j++){
cibles.push_back(make_pair(i, j));
}
}
srand(rand());
if(randomized) random_shuffle(cibles.begin(), cibles.end());
for(int k = 0; k < cibles.size(); k++){
if(sol.removeCaptor(cibles[k])){
if(!sol.realisable()){
sol.addCaptor(cibles[k]);
}
}
}
return sol;
}
更完整的代码:https://codeshare.io/2jLnzB
【问题讨论】:
-
solution类是否跟随the rules of three, five or zero? -
minimal reproducible example 请。可能的罪魁祸首是
get_randomized_solution。注意它不见了。 -
我们还实现了复制构造函数
solution::solution(const solution &s),没有改变任何东西 -
@Someprogrammerdude 是的。