如何正确处理内存,同时将地图从一个函数传递到另一个函数。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