Pergunta

Eu tenho um vector, definido por std::vector<LPDIRECT3DTEXTURE9> textures; Mais tarde, eu estou passando um objeto LPDIRECT3DTEXTURE9 a ele, como assim textures.push_back(texture); Aqui está um exemplo disso:

void SpriteManager::AddSprite(float x, float y, float z, LPDIRECT3DTEXTURE9 texture)
{
    //snip
    textures.push_back(texture);
    //snip
}

Isso está causando um erro de execução. É quebra na classe vector na função size(). Por que isso pode acontecer?

Editar:

Eu também correr em um problema idêntico realizar a mesma operação em um vetor de objetos D3DXVECTOR3. Desde LPDIRECT3DTEXTURE9 é um ponteiro para um IDIRECT3DTEXTURE9, eu deveria estar usando esse vez?

Foi útil?

Solução

De longe, o motivo mais comum é que você realmente não tem um vetor. Neste caso, textures parece ser um membro da classe SpriteManager. Então, isso sugiro que você realmente não tem um objeto SpriteManager quer. É o ponteiro this válido?

Outras dicas

Bem, já que LPDIRECT3DTEXTURE9 pelo seu nome húngaro é um ponteiro e não um objeto (como você se referem a ele), meu palpite é que você está passando ponteiros em torno inválidos que já fizeram um fandango em seu pobre objeto vector antes de chamar push_back ().

Eu posso estar errado, mas isso é tanto quanto pode ser dito a partir das informações que você fornecer. E, sim, push_back () deve ser capaz de falhar se houver falta de memória ou tentando usar um não-copiável ou objeto não atribuível no vector, e, em seguida, não através de uma violação de acesso.

O vector foi corrompido. Eu sugiro colocar um ponto de controle de dados em seus internos para ver o que está pisando nele (em um depurador).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top