2017-01-04 30 views
-2

なぜ動作しないのかわかりません。私はpush_backでそれをやろうとしましたが、どちらもうまくいきません。ベクトルに挿入すると値が挿入されない

私はそれをデバッグしようとすると、私はエラーを取得する:

GeneticAlgorithm(8942,0x7fffc40183c0) malloc: * mach_vm_map(size=1059546636242944) failed (error code=3) * error: can't allocate region *** set a breakpoint in malloc_error_break to debug libc++abi.dylib: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc

私もvectorOfIndividualsのサイズを変更しようとしたが、その後、私はBAD_ACCESS ERROR

Population children(population); 
    population.getVectorOfIndividuals().insert(population.getVectorOfIndividuals().begin(),children.getVectorOfIndividuals().begin(),children.getVectorOfIndividuals().end()); 

人口コピーコンストラクタを取得:

Population::Population(const Population &populationToSave){ 
vectorOfIndividuals = populationToSave.vectorOfIndividuals; 
bestFitnessScore = populationToSave.bestFitnessScore; 

}

ゲッター:

vector<Individual> Population::getVectorOfIndividuals(){ 
return vectorOfIndividuals; 

}

私はあなたの助けのために非常に感謝されます。あなたが行うとき、そうで

vector<Individual>& Population::getVectorOfIndividuals() 
{ 
    return vectorOfIndividuals; 
} 

+2

[編集] ** [mcve]または[SSCCE(ショート、自己完結型、正しい例)](http://sscce.org) – NathanOliver

+0

あなたの質問は、あなたが不足しているようですメモリの。あなたが使っているOSやマシン(iOS?)は分かりませんが、 'mach_vm_map(size = 1059546636242944)のサイズが失敗しました。このコードのどの部分で実際に失敗するのですか?私は 'population.getVectorofIndividuals()。insert(...)'コールを推測していますか? 'children'自体は' population'から初期化されているので、各繰り返しでベクターがかなり早く成長すると私にはわかりますが、使用しているAPIはわかりません。 –

+0

@OliverSeiler 'children'には5要素しか含まれていないので、奇妙です。私はMacOS上でClionを使用しています。 –

答えて

2

あなたのゲッターはコピーではなく、参照を返す必要があります

population.getVectorOfIndividuals().insert(population.getVectorOfIndividuals().begin(),children.getVectorOfIndividuals().begin(),children.getVectorOfIndividuals().end()); 

あなたが一つに挿入する(一緒に別のオブジェクトを混ぜ、の初めに別のもの... population.getVectorOfIndividuals()へのすべての呼び出しが異なるvector<Individual>オブジェクトを返します。vectorA.insert(vectorB.begin(),vectorC.begin(),vectorC.end())を実行するようなものです。無効です... vectorAvectorBは同じオブジェクトである必要があります)。

+0

ええ、それは参考になりました、ありがとうございました。 –

1

あなたの方法:あなたは新しいコピーが作成され、このメソッドを呼び出すたびに、意味値で

vector<Individual> Population::getVectorOfIndividuals() 

戻りVectorインスタンス。したがって、最初に、insertと呼ばれる別のベクトルのbegin()と、子どものbegin()end()も2つの異なるコンテナのイテレータに渡します。 insertの結果もパラメータを適切に渡しても削除されます。ほとんどの場合、そのメソッドが参照によってvector<Individual>を返すようにします。

関連する問題