运行时错误:使用带有std :: vector的.push_back()时访问冲突?

时间:2009-11-26 14:55:32

标签: c++ vector directx

我有一个向量,由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个对象的矢量执行相同操作的相同问题。由于LPDIRECT3DTEXTURE9是指向IDIRECT3DTEXTURE9的指针,我应该使用它吗?

3 个答案:

答案 0 :(得分:1)

好吧,因为它的匈牙利名字LPDIRECT3DTEXTURE9是一个指针而不是一个对象(正如你所指的那样),我的猜测是你传递的无效指针已经在你的可怜的向量上做了fandango在调用push_back()之前的对象。

我可能错了,但这可以从您提供的信息中说出来。并且,是的,push_back()应该只能在内存不足或尝试在向量中使用不可复制或不可分配的对象时失败,然后才能通过访问冲突。

答案 1 :(得分:1)

您的矢量已损坏。我建议在其内部放置一个数据观察点,看看它是什么(在调试器中)。

答案 2 :(得分:0)

到目前为止,最常见的原因是你实际上没有矢量。在这种情况下,textures似乎是SpriteManager类的成员。所以,这表明你实际上也没有SpriteManager对象。 this指针有效吗?

相关问题