如何正確處理內存,同時將地圖從一個函數傳遞到另一個函數。std ::映射值在返回後丟失
我有一個函數返回它構建的地圖。值對象是一個foo類。 我在三個不同的位置打印foo,並且它們都給出不同的值。第一次,它給出了正確的值。第二和第三是垃圾。
我知道我必須在正確的地方製作Foo對象指針。
我想知道在哪裏?
std::map<int,Foo*> function_that_returns_the_map(){
std::map<int,Foo*> myMap;
{
int v = 0;
Foo *b = new Foo();
// PRINTING FOO FIRST
std::cout<<""<<*b<<endl;
myMap.insert(std::pair<int,Foo*>(v,b))
}
// PRINTING FOO AGAIN
for(map<int,Foo*>::iterator it = myMap.begin();
it != myMap.end(); ++it)
{
std::cout << " " << *(it->second) << "\n";
}
return myMap;
}
std::map<int, Foo*> myMap;
myMap = function_that_returns_the_map();
//PRINTING FOO AGAIN.
std::map<int, Board*>::iterator it = myMap.begin();
for (it=myMap.begin(); it!=myMap.end(); ++it)
cout<<" "<<*(it->second)<<endl;
Click here看到我的實際代碼。
更新:Foo的成員變量沒有使用'new'運算符分配。因此,他們超出了範圍,並在垃圾價值超出範圍之後出現。
請張貼無需修改即可演示問題的代碼。你是否意識到你實際上並沒有將'b'放入地圖? –
也許你想'myMap.insert(std :: make_pair(v,b))'。不要忘記釋放內存。 – 0x499602D2
你是什麼意思你「印刷富」?你無法打印課程。請顯示打印的實際代碼而不是註釋。 – JBentley