Error de tiempo de ejecución: ¿Infracción de acceso al usar .push_back () con un std :: vector?
Pregunta
Tengo un vector, definido por std::vector<LPDIRECT3DTEXTURE9> textures;
Más tarde, le paso un objeto LPDIRECT3DTEXTURE9
, así textures.push_back(texture);
Aquí hay una muestra de esto:
void SpriteManager::AddSprite(float x, float y, float z, LPDIRECT3DTEXTURE9 texture)
{
//snip
textures.push_back(texture);
//snip
}
Esto está causando un error de tiempo de ejecución. Se está rompiendo en la clase de vector en la función size()
. ¿Por qué puede pasar esto?
Edición :
También me encuentro con un problema idéntico al realizar la misma operación en un vector de D3DXVECTOR3
objetos. Dado que IDIRECT3DTEXTURE9
es un puntero a un <=>, ¿debería usar eso en su lugar?
Solución
Con mucho, la razón más común es que en realidad no tienes un vector. En este caso, textures
parece ser un miembro de la clase SpriteManager
. Entonces, eso sugiere que en realidad tampoco tienes un objeto this
. ¿Es válido el puntero <=>?
Otros consejos
Bueno, dado que LPDIRECT3DTEXTURE9 por su nombre húngaro es un puntero y no un objeto (como se refiere a él), supongo que está pasando punteros inválidos que ya han hecho un fandango en su pobre objeto vectorial antes de llamar a push_back ().
Podría estar equivocado, pero esto es todo lo que se puede decir de la información que proporciona. Y sí, push_back () solo debería poder fallar si no tiene memoria o si está tratando de usar un objeto no copiable o no asignable en el vector, y luego no a través de una infracción de acceso.
Su vector ha sido dañado. Sugeriría poner un punto de observación de datos en sus componentes internos para ver qué está pisoteando (en un depurador).