私はboost_create_ptrのベクトルを持っていますが、ローカルで作成された新しいshared_ptrの最後にプッシュすると失敗します。誰かが次のコードに間違っていることを教えてもらえますか?shared_ptrをベクトルにプッシュするのに失敗しました
std::vector<boost::shared_ptr<A> > vecA;
BOOST_FOREACH(const std::string& s, vecStrings)
{
boost::shared_ptr<A> pNewA = boost::make_shared<A>(s);
pNewA->MyString(); //OK
vecA.push_back(pNewA); //throw error Assertion `px != 0' failed
}
UPDATEは: それはプッシュのない問題のように思えるが、私はshared_ptrのための基準を使用していました。
for(int i=0, n=vecA.size(); i <n; i++)
{
//use pA
boost::shared_ptr& pA = vecA[i];
vecA.push_back(pA);
//will core dump at the end of loop because pA changed due to vector enlarge
}
'A'は何ですか? 'pNewA-> MyString()'とは何ですか? – erenon
私は[Undefined Behavior](https://en.wikipedia.org/wiki/Undefined_behavior)の疑いがあります。小さなサンプルで問題を再現してみてください。消えてしまうまで徐々にエラーの原因を取り除く。 – sehe
Aは、文字列メンバーと2つの整数メンバーを持つ単なる構造体です。 –