Erreur d'exécution: violation d'accès lors de l'utilisation de .push_back () avec un std :: vector?

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

  •  05-07-2019
  •  | 
  •  

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?

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top