Errore di runtime: accedere alla violazione quando si utilizza .push_back () con uno std :: vector?

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

  •  05-07-2019
  •  | 
  •  

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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top