ランタイムエラー:std :: vectorで.push_back()を使用するとアクセス違反が発生しますか?

StackOverflow https://stackoverflow.com/questions/1804148

  •  05-07-2019
  •  | 
  •  

質問

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は<=>へのポインターであるため、代わりにそれを使用する必要がありますか?

役に立ちましたか?

解決

最も一般的な理由は、実際にはベクターがないことです。この場合、texturesSpriteManagerクラスのメンバーであるように見えます。そのため、実際にはthisオブジェクトもないことを示唆しています。 <=>ポインターは有効ですか?

他のヒント

まあ、LPDIRECT3DTEXTURE9はそのハンガリー語の名前ではポインターであり(オブジェクトを参照するとき)オブジェクトではないので、私の推測では、既に fandango は、push_back()を呼び出す前に、貧弱なベクターオブジェクトで実行します。

間違っているかもしれませんが、これはあなたが提供した情報から言えることです。そして、はい、push_back()は、メモリが不足している場合、またはベクターでコピー不可または割り当て不可のオブジェクトを使用しようとした場合にのみアクセスでき、アクセス違反はありません。

ベクターが破損しています。データウォッチポイントを内部に配置して、(デバッガーで)踏みつけているものを確認することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top