我有boost的shared_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
我懷疑[未定義行爲](https://en.wikipedia.org/wiki/Undefined_behavior)。嘗試用較小的樣本重現您的問題。逐漸消除錯誤的來源,直到消失。 – sehe
A只是一個帶有字符串成員和兩個整數成員的結構。 –