런타임 오류 : std :: 벡터와 함께 .push_back ()를 사용할 때 액세스 위반?

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

  •  05-07-2019
  •  | 
  •  

문제

나는 정의 된 벡터가 있습니다 std::vector<LPDIRECT3DTEXTURE9> textures; 나중에 나는 지나가고있다 LPDIRECT3DTEXTURE9 그렇게 반대하십시오 textures.push_back(texture); 다음은 이것의 샘플입니다.

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

이로 인해 런타임 오류가 발생합니다. 그것은 벡터 클래스에서 깨지고 있습니다 size() 기능. 왜 이런 일이 일어날까요?

편집하다:

또한 벡터에서 동일한 작업을 수행하는 동일한 문제가 발생합니다. D3DXVECTOR3 사물. 부터 LPDIRECT3DTEXTURE9 에 대한 포인터입니다 IDIRECT3DTEXTURE9, 대신 사용해야합니까?

도움이 되었습니까?

해결책

지금까지 가장 일반적인 이유는 실제로 벡터가 없기 때문입니다. 이 경우 textures 멤버 인 것 같습니다 SpriteManager 수업. 그래서, 그것은 당신에게 실제로 당신이 없다는 것을 제안합니다 SpriteManager 물체도. 입니다 this 포인터 유효?

다른 팁

글쎄, 헝가리어 이름으로 lpdirect3dtexture9가 포인터이기 때문에 (당신이 언급하는 것처럼), 당신이 이미 수행 한 잘못된 포인터를 지나가고 있다는 것입니다. 팬자 고 push_back ()를 호출하기 전에 열악한 벡터 객체에서.

나는 틀릴 수도 있지만 이것은 당신이 제공하는 정보에서 말할 수있는만큼입니다. 예, Push_back ()는 메모리를 벗어나거나 벡터에서 인정받을 수 없거나 할당하지 않은 객체를 사용하고 액세스 위반을 통해서는 안되는 경우에만 실패 할 수 있어야합니다.

벡터가 손상되었습니다. 나는 내부에 데이터 감시점을 놓고 (디버거에서) 무엇을 밟고 있는지 확인하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top