이제이 문제에 대해 많은 것을 알게되었으므로이 문제를 완전히 다시 작성해야했습니다.새로운 기능으로 내 개체가 올바르게 작동하지 않습니다.
배경 :
내 프로그램이 directx11에서 일부 3D 객체를 끌고있다. 필요한 3D 객체를 그리는 데 필요한 데이터, 포인터 및 함수가 포함 된 클래스가 있습니다. 모든 것이 잘 작동했다. 나는 많은 다른 3d 객체를 생성 할 수 있었고, 내가 원했던 곳에 그것들을 그릴 수 있었다. 큰!
그런 다음 컨테이너에 넣고 벡터에 넣을 필요가있어서 수동으로 각 객체를 만들 필요가 없었습니다. 문제가 발생한 곳이었습니다. 5시에 1 번 충돌합니다.
Unhandled exception at 0x00C308C1 in SpritesNTextN3D.exe: 0xC0000005: Access violation reading location 0xFFFFFFFF.
벡터 및지도를 사용할 때 충돌이 발생했습니다. 나는 질문이 줄을 계속하고 새로운 포인터 및 사용하여 시도 :이 또한 나는 그것의 그리기 기능을 실행 할 때 충돌이 발생
ThreeD_Cube* threed_cube_p;
threed_cube_p = new ThreeD_Cube;
합니다.
threed_cube_p->draw(threeD, camera, d3dContext_mp);
그러나 표준 객체로 만든 경우 :
ThreeD_Cube threed_cube_;
추첨 기능이 충돌하지 않습니다.
threed_cube_-.draw(threeD, camera, d3dContext_mp);
마찬가지로 threed_cube_에 대한 포인터를 만들면 예상대로 작동합니다.
질문 : 기본 생성자가 아니라고하고 새로운 기능
. 이 문제를 해결하기 위해 내가 봐야 할 것이 있습니까?
'threed_cube_vec'는 어디에 있나요? 당신이 얻는 에러는 비어 있음을 나타내는 것처럼 보이고,'operator [] (size_t)'를 사용하면'.at (size_t)'와는 달리 경계를 검사하지 않을 것입니다. – WhozCraig
당신은 뭔가를 잡고있는 벡터입니까? 예, 확실히 새로운 객체에 복사 할 수 있습니다. 난 그냥 = threed_cube_vec.size() 루프에 넣고 동일한 결과가 있습니다. 나는 당신의 의견을 잘못 이해하지 않기를 바랍니다. – David
나는 야생 예측을하고 그것이'vector' 구현이 아니라, 당신의 코드에서, 아마도 ThreeD_Cube 구현이 그 범인이라고 말할 것이다. [Three of Rule] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)에 복종하고 있습니까? – Praetorian