싱글 톤, 즉 이미지 관리자입니다.std :: map을 초기화해야합니까?
m_imageMap[imageHashID].setHeight(ilGetInteger(IL_IMAGE_HEIGHT));
m_imageMap[imageHashID].setWitdh(ilGetInteger(IL_IMAGE_WIDTH));
m_imageMap[imageHashID].setBpp(ilGetInteger(IL_IMAGE_BPP));
....
문제는 내가를 얻을 수 있습니다 : loadFromFile 방법으로, 나는지도에 이미지를 저장,
utils::CImageBuff* img4 = utils::CImageManager::getInstance()->loadFromFile("uswg.png");
그리고 : 나는 이미지를로드 할 때, 나는 이런 식으로 싱글을 호출 mem 액세스 오류. m_imageMap이 NULL 인 경우와 같습니다. o 잘못된 문장이 첫 번째 문장에서 throw되기 때문에 잘못 초기화되었습니다. 하지만 내가 말했듯이 싱글 톤이므로지도를 초기화해야합니다. VC++ 2008에서 개발 중입니다. 잘못된 컴파일/.obj 파일 일 수 있습니까?
어제도 잘 작동했습니다.
몇 가지 조언이 있습니까?
편집 : m_imageMap의 선언은 매우 간단 :
typedef std::map<unsigned int,utils::CImageBuff> t_imageMap;
같은 추가 정보를 생성하는 예외 파일 output.c의 행 1643로이다.
편집 글쎄, 나는이 사건에 매우 실망했다. 코드를 변경하여 클래스가 더 이상 싱글 톤이 아니게되었습니다. 이제 m_imageMap 만 정적이므로 모든로드 된 이미지를 어느 위치에서나 볼 수 있습니다. 그러나 여전히 같은 방식으로 실패합니다. 오류는 액세스 위반입니다. 또한,이 코드로 모든 메소드 코드를 다음과 같이 변경하면 :
utils::CImageBuff im;
m_imageMap[1] = im; // fails here
return &im;
여전히 실패합니다. 지도가 null이거나 어떤 방식 으로든 고정되어 있거나 심지어 초기화 상태가 좋지 않은 것처럼 보입니다. 그러나 모르겠습니다. 당신이 나를 도울 수?
코드가 더 필요하면 붙이 겠지만이 세 줄을 사용하면 문제가 간단 해집니다.
편집 : 마지막으로 마지막으로 내가
std::map<unsigned int,utils::CImageBuff*>
에
std::map<unsigned int,utils::CImageBuff>
에서 변경 한 해결 그리고 지금은 작동합니다. 이제 포인터의 정적 std :: map의 내용을 삭제하는 메서드를 생각하면됩니다. 모든
어떻게'm_imageMap'이 선언 되었습니까? –
'm_imageMap'의 정의를 보여주세요. 'std :: map'은'NULL' 일 수 없습니다. 그건 말이되지 않습니다. –
m_imageMap은 어떤 유형입니까? 나머지 loadFromFile 함수는 어떻게 생겼습니까? – SoapBox