运行时错误:使用带有std :: vector的.push_back()时访问冲突?
题
我有一个向量,由std::vector<LPDIRECT3DTEXTURE9> textures;
定义。稍后,我将一个LPDIRECT3DTEXTURE9
对象传递给它,就像这样textures.push_back(texture);
以下是此示例:
void SpriteManager::AddSprite(float x, float y, float z, LPDIRECT3DTEXTURE9 texture)
{
//snip
textures.push_back(texture);
//snip
}
这会导致运行时错误。它在size()
函数的向量类中打破。为什么会这样?
修改强>
我也遇到了一个相同的问题,对D3DXVECTOR3
对象的向量执行相同的操作。由于IDIRECT3DTEXTURE9
是指向<=>的指针,我应该使用它吗?
解决方案
到目前为止,最常见的原因是你实际上没有矢量。在这种情况下,textures
似乎是SpriteManager
类的成员。所以,这表明你实际上也没有this
对象。 <=>指针有效吗?
其他提示
好吧,因为它的匈牙利名字LPDIRECT3DTEXTURE9是一个指针而不是一个对象(正如你所指的那样),我的猜测是你传递的无效指针已经做了 fandango 在你的可怜的矢量对象上调用push_back()之前。
我可能错了,但这可以从您提供的信息中说出来。并且,是的,push_back()应该只能在内存不足或尝试在向量中使用不可复制或不可分配的对象时失败,然后才能通过访问冲突。
您的矢量已损坏。我建议在其内部放置一个数据观察点,看看它是什么(在调试器中)。
不隶属于 StackOverflow