我有一个指针向量..。
我想通过存储在std::vector中的指针访问我的Image对象。迭代器找到我的对象后,我想访问/修改由向量中的指针指向的Image对象的某些成员。
救命啊!!
class Image;
typedef std::vector <Image*> VecImages;
typedef VecImages::iterator ImagesIter;
class My_Images
{
private:
VecImages m_Images;
public:
My_Images() {}
~My_Images();
void addImage(Image* img) {m_Images.push_back(img);}
Image* getImage(string& rID);
};
// get image method
Image* My_Images::getImage(string& rID)
{
ImagesIter foundImg = m_Images.begin();
while (foundImg != m_Images.end()) {
Image* img = *foundImg; ***<<<<----------- [EXC_BAD_ACCESS is reported here]***
const string &strID = img->get_strRId();
if (strID == rID) {
return (*foundImg);
}
++foundImg;
}
return NULL;
}
// get-id method
const string& Image::get_strRId(void) {return m_strRId;}
// copy constructor
Image::Image(const Image& _src)
: m_strRId(_src.m_strRId)
{}我还有一个班叫建筑工..。在这里,我调用addImage()方法,像这样.My_Images *m_images;(我创建这个‘新’)映像*currImg =新图像;currImg->setName("ABC");.在currImg上调用其他几个“set”函数(主要是设置std::string的函数)。
然后我用下面的调用将它添加到向量中。
m_images->addImage(currImg);
一旦它被存储在向量中,我就给出它的所有权。currImg =空;
template <class _Type>
_Type* ChAutoPtr<_Type>::giveUpOwnership()
{
#ifdef VERIFY_WITH_SHADOW_STACK
// Check to see if the last auto-ptr is the one that is being
// given up!!!
if (m_pInstance != NULL)
{
void* pTop = g_cleanupStackShadow.top();
ChASSERT(pTop == m_pInstance);
g_cleanupStackShadow.pop();
}
#endif /* _DEBUG */
_Type* pTmp = m_pInstance;
m_pInstance = NULL;
return pTmp;
}发布于 2012-07-23 13:52:52
EXC_BAD_ACCESS意味着(1)将未初始化的对象添加到向量中,或者(2)它的生命周期很短,并且它在调用getImage()之前就不复存在了。您可以尝试启用NSZombies或验证添加到向量的图像的生存期和范围。最好使用智能指针(例如shared_ptr)。
https://stackoverflow.com/questions/11612030
复制相似问题