代码之家  ›  专栏  ›  技术社区  ›  user189327

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

  •  3
  • user189327  · 技术社区  · 15 年前

    我有一个向量,由 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 物体。自从 lpdirect3d纹理9 是指向 IDIRECT3DTEXTURE9 我应该用它来代替吗?

    3 回复  |  直到 15 年前
        1
  •  0
  •   MSalters    15 年前

    到目前为止,最常见的原因是你实际上没有向量。在这种情况下, textures 似乎是 SpriteManager 班级。所以,这表明你实际上没有 斯普利曼 对象也可以。是 this 指针有效吗?

        2
  •  1
  •   Pontus Gagge    15 年前

    好吧,因为用匈牙利语命名的lpdirect3dstructure9是一个指针,而不是一个对象(如您所指),我猜您传递的是已经执行了 fandango 在你调用push_back()之前,在你可怜的向量对象上。

    我可能是错的,但这是从你提供的信息中可以说的最多的。是的,只有当内存不足或试图在向量中使用不可复制或不可分配的对象,而不是通过访问冲突时,push_back()才能失败。

        3
  •  1
  •   Bahbar    15 年前

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