Error de tiempo de ejecución: ¿Infracción de acceso al usar .push_back () con un std :: vector?

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

  •  05-07-2019
  •  | 
  •  

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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top