Vector C++向量:插入的Sebug

Vector C++向量:插入的Sebug,vector,insert,segmentation-fault,Vector,Insert,Segmentation Fault,以下代码在到达insert语句时给出SEGFULT: rna* annealer::anneal(rna strand1, rna strand2, const rna & opponent){ std::vector<nukleotid*>::iterator sit2; std::vector<nukleotid*>::iterator eit2; std::vector<nukleotid*>::iterator eit; if(tr

以下代码在到达insert语句时给出SEGFULT:

rna* annealer::anneal(rna strand1, rna strand2, const rna & opponent){

 std::vector<nukleotid*>::iterator sit2;
 std::vector<nukleotid*>::iterator eit2;
 std::vector<nukleotid*>::iterator eit;

 if(tryAnneal(strand1, strand2, opponent)) {
  eit = strand1.getStrand().end();
  sit2 = strand2.getStrand().begin();
  eit2 = strand2.getStrand().end();

         //here be segfault
  strand1.getStrand().insert(eit, sit2, eit2);
  strand1.isAnnealed = true;
  rna* str = &strand1;
  std::cout << *str << std::endl;
  return str;
 }


    //...

 return NULL;
}
rna包含一个载体,由getStrand返回

这快把我逼疯了。我真不明白为什么会有断层。代码的一个稍有不同的版本,在中没有声明新的迭代器,只是传递了strand1.getStrand.end;另外两个,to vector::insert直接抛出了一个length_错误,这也没有任何意义,因为我的向量是小的~10个元素


有人知道我做错了什么吗?`

如果getStrand按值返回向量,那么sit2和eit2是向量不同副本的迭代器,一旦获得迭代器,这两个副本都会被销毁。您需要通过引用返回向量,或者保存向量的副本并从该副本获取迭代器。

如果getStrand按值返回向量,则sit2和eit2是向量不同副本的迭代器,并且一旦获取迭代器,这两个副本都将被销毁。您需要通过引用返回向量,或者保存向量的副本并从该副本获取迭代器。

我猜getStrand返回的是向量的副本,而不是对它的引用。这将导致您使用的eit、sit2等迭代器在创建后立即失效


你能粘贴该方法的声明吗?

我猜getStrand返回的是向量的副本,而不是对它的引用。这将导致您使用的eit、sit2等迭代器在创建后立即失效


您能粘贴该方法的声明吗?

是的,确实如此!我的向量由值返回!非常感谢你!是的,确实如此!我的向量由值返回!非常感谢你!