Max*_*Max 3 c++ segmentation-fault stdvector
我有这段代码:
cerr << client->inventory.getMisc().front()->getName() << endl;
vector<itemPtr>::iterator it;
it = client->inventory.getMisc().begin();
cerr << (*it)->getName() << endl;
Run Code Online (Sandbox Code Playgroud)
让我解释一下:
client是一个tr1::shared_ptr指向一个对象,该对象具有一个名为的成员inventory,该vector<itemPtr>成员可以访问私有成员getMisc().itemPtr是一个typedef tr1::shared_ptr<Item>,并getName()返回一个私有std::string成员Item.
从本质上讲,client->inventory.getMisc()归结为a std::vector,我试图获得第一个元素的迭代器.
问题是第四行是segfaults.显然,迭代器或它指向的shared_ptr都是无效的.我使用第一个cerr语句来测试向量本身是否有效,并且它应该打印,所以我认为它是.
有什么我做错了吗?或者,你们会做什么来调试这个?
Wal*_*ndt 12
签名究竟是什么getMisc?
如果您实际上正在返回a,std::vector<itemPtr>那么您将返回列表的副本.在这种情况下,第一个访问模式将起作用(缓慢),因为临时副本在front完成执行之后不会被销毁,此时将itemPtr自身复制到临时副本中.第二个失败是因为在获取迭代器之后begin,临时属于范围而被破坏,使刚刚创建的迭代器挂起.