ランタイムエラー: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()は、メモリが不足している場合、またはベクターでコピー不可または割り当て不可のオブジェクトを使用しようとした場合にのみアクセスでき、アクセス違反はありません。
ベクターが破損しています。データウォッチポイントを内部に配置して、(デバッガーで)踏みつけているものを確認することをお勧めします。