2009-06-24 5 views
4

저는 작업중인 게임의 편집기를 해킹하고 있습니다. 해당 편집기의 일부로 분명히 텍스처가 있어야합니다. std :: map 변수를 만들었습니다.비정상적인 std :: map 런타임 오류

std::map<std::string, unsigned int> textures; 

내 이미지로드 코드에 다음 스 니펫이 있습니다.

unsigned int id; 
glGenTextures(1, &id); 
glBindTexture(GL_TEXTURE_2D, id); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 
glBindTexture(GL_TEXTURE_2D, 0); 

textures[filename] = id; 

이제 위의 코드를 사용하여 어떤 이유로 런타임 오류가 발생합니다. 액세스 위반 오류, 디버깅 할 때 표준 : 맵 코드 자체에 저를 가리키는 것으로, 특히,이 부분 :

_Nodeptr _Lbound(const key_type& _Keyval) const 
    { // find leftmost node not less than _Keyval 
    _Nodeptr _Pnode = _Root(); // ** this is the highlighted line ** 
    _Nodeptr _Wherenode = _Myhead; // end() if search fails 

    while (!_Isnil(_Pnode)) 
     if (_DEBUG_LT_PRED(this->comp, _Key(_Pnode), _Keyval)) 
      _Pnode = _Right(_Pnode); // descend right subtree 
     else 
      { // _Pnode not less than _Keyval, remember it 
      _Wherenode = _Pnode; 
      _Pnode = _Left(_Pnode); // descend left subtree 
      } 

    return (_Wherenode); // return best remembered candidate 
    } 

나는 단지 시스템을 테스트하는 내 이미지 로딩 기능을 하나의 호출을 만들고 있어요 . 내가 변수를 확인하고 파일 이름과 id 변수가 모두 정확합니다. 런타임 오류를 일으키는 원인이 될 수있는 아이디어는 무엇입니까?

+0

지도에 문제가있는 것처럼 보이지 않습니다. 아마도 메모리가 다른 곳에서 손상되고 있습니까? 이 코드에서 valgrind와 같은 것을 실행 해 보셨습니까? –

+0

파일 이름이 std :: string입니까? – Brian

+0

@brian - 중요하지 않아야합니다.지도 키는 사본이됩니다. –

답변

1

지도가 제대로 구성되지 않은 것으로 보입니다. 초기화 순서가 잘못된 것 같습니다. 지도가 정적 또는 전역 변수입니까? 코드가 정적 객체의 일부입니까?

+0

지도는 전역 개체이며 함수도 전역입니다. –

+0

함수가 전역 변수인지 아닌지는 중요하지 않습니다. 누가 함수를 호출하는지 중요합니다. 그것은 전역 객체의 생성자로부터 호출되고 있습니까? –

관련 문제