【发布时间】:2013-12-27 19:39:12
【问题描述】:
我正在使用 VS2012 编写 MFC 应用程序。
我有一个Bitmap* 的向量,我在 for 循环中插入元素,然后,如果我尝试在循环外访问某个元素的函数,它会给我一个访问冲突。
奇怪的是,如果我尝试在循环内访问它,它工作得很好。
在这两个例子中m_VectorImageNames 已经填充了一些图像文件路径,这不是问题。
以下代码给出了访问冲突(在最后一行):
std::vector<Bitmap *> vectorImages;
for (int i = 0; i < nImages; i++)
{
Bitmap img(m_VectorImageNames[i]);
vectorImages.push_back(&img);
}
int imgWidth= vectorImages[0]->GetWidth();
如果我将GetWidth 放入循环中,它会返回正确的值:
std::vector<Bitmap *> vectorImages;
for (int i = 0; i < nImages; i++)
{
Bitmap img(m_VectorImageNames[i]);
vectorImages.push_back(&img);
int imgWidth= vectorImages[0]->GetWidth();
}
我已经尝试了一些事情,但没有成功:
- 使用向量将具有的大小初始化向量,然后将每个位图插入其相应位置(希望这是分配问题)。
- 使用迭代器循环
- 使向量成为类成员变量
有人知道可能发生了什么吗?
【问题讨论】:
-
您需要了解对象的生命周期。您的
Bitmaps 在循环迭代结束时被销毁。然后你就有了指向已经销毁的对象的指针。 -
" vectorImagenes.push_back(&img); " 应该是vectorImages.push_back(&img) 吗?
标签: c++ function vector bitmap access-violation