Erreur d'exécution: violation d'accès lors de l'utilisation de .push_back () avec un std :: vector?
Question
J'ai un vecteur, défini par std::vector<LPDIRECT3DTEXTURE9> textures;
Ensuite, je lui passe un LPDIRECT3DTEXTURE9
objet, comme suit textures.push_back(texture);
Voici un exemple de ceci:
void SpriteManager::AddSprite(float x, float y, float z, LPDIRECT3DTEXTURE9 texture)
{
//snip
textures.push_back(texture);
//snip
}
Ceci provoque une erreur d'exécution. Il entre dans la classe de vecteur à la fonction size()
. Pourquoi cela pourrait-il arriver?
Modifier:
Je rencontre également un problème identique lors de l'exécution de la même opération sur un vecteur D3DXVECTOR3
d'objets. Puisque IDIRECT3DTEXTURE9
est un pointeur sur un <=>, devrais-je l'utiliser à la place?
La solution
De loin, la raison la plus courante est que vous n’avez pas de vecteur. Dans ce cas, textures
semble appartenir à la classe SpriteManager
. Donc, cela suggère que vous n'avez pas non plus d'objet this
. Le <=> pointeur est-il valide?
Autres conseils
Eh bien, puisque LPDIRECT3DTEXTURE9, de par son nom hongrois, est un pointeur et non un objet (comme vous le référez), j’imagine que vous transmettez des pointeurs non valides qui ont déjà effectué un fandango sur votre pauvre objet vectoriel avant d'appeler push_back ().
Je me trompe peut-être, mais c'est tout ce que l'on peut dire à partir des informations que vous fournissez. Et, oui, push_back () ne devrait pouvoir échouer que si vous êtes à court de mémoire ou si vous essayez d'utiliser un objet non copiable ou non cessible dans le vecteur, sans passer par une violation d'accès.
Votre vecteur a été corrompu. Je suggérerais de placer un point de contrôle des données sur ses composants internes pour voir ce qui la piétine (dans un débogueur).