Errore di runtime: accedere alla violazione quando si utilizza .push_back () con uno std :: vector?
Domanda
Ho un vettore, definito da std::vector<LPDIRECT3DTEXTURE9> textures;
In seguito, gli sto passando un LPDIRECT3DTEXTURE9
oggetto, in questo modo textures.push_back(texture);
Ecco un esempio di questo:
void SpriteManager::AddSprite(float x, float y, float z, LPDIRECT3DTEXTURE9 texture)
{
//snip
textures.push_back(texture);
//snip
}
Questo sta causando un errore di runtime. Si sta rompendo nella classe vettoriale nella funzione size()
. Perché potrebbe succedere?
Modifica
Ho anche riscontrato un identico problema eseguendo la stessa operazione su un vettore di D3DXVECTOR3
oggetti. Poiché IDIRECT3DTEXTURE9
è un puntatore a un <=>, dovrei usarlo invece?
Soluzione
Di gran lunga il motivo più comune è che in realtà non hai un vettore. In questo caso, textures
sembra essere un membro della classe SpriteManager
. Quindi, ciò suggerisce che in realtà non hai nemmeno un this
oggetto. Il <=> puntatore è valido?
Altri suggerimenti
Bene, dal momento che LPDIRECT3DTEXTURE9 con il suo nome ungherese è un puntatore e non un oggetto (come ti riferisci ad esso), la mia ipotesi è che stai passando puntatori non validi che hanno già fatto un fandango sul tuo povero oggetto vettoriale prima di chiamare push_back ().
Potrei sbagliarmi, ma questo è quanto si può dire dalle informazioni fornite. E, sì, push_back () dovrebbe essere in grado di fallire solo se si è esaurito la memoria o si sta tentando di utilizzare un oggetto non copiabile o non assegnabile nel vettore, e quindi non attraverso una violazione di accesso.
Il tuo vettore è stato danneggiato. Suggerirei di mettere un watchpoint di dati sui suoi interni per vedere cosa sta calpestando (in un debugger).