2013-01-12 2 views
0

SDL_Surface를로드 한 후 내 자신의 정의 된 클래스 인 Actor 내에서 내 SDL_Surface가 NULL로 돌아갑니다. 많은 콘솔 출력과 GDB를 사용하여 오류의 위치를 ​​찾습니다. Actor 클래스는 SDL_Surface에 대한 포인터를 포함하고 Actor :: getSurface는 SDL_Surface에 대한 포인터를 반환합니다.SDL_Surface 클래스가 NULL이되는 클래스

물론 더 많은 코드가 문제를 해결하는 데 도움이된다고 생각하면 공유하게되어 기쁩니다.

내 프로그램의 출력은 다음과 같습니다 나는 코드의 중요 부분을 잘라

--Surface was loaded. 
Surface is NULL after loading. 

.

MAIN.CPP :

SDL_Init(SDL_INIT_EVERYTHING); 

Actor sprite; 
sprite.loadSurface("images/bg.bmp"); 
if(sprite.getSurface() == NULL) 
    std::clog << "Surface is NULL after loading." << std::endl; 

Actor.cpp는

bool Actor::loadSurface(std::string t_filename) 
{ 
    std::clog << "-ACTOR " << m_id << " LOADSURFACE" << std::endl; 
    SDL_Surface * loadedImage = NULL; 
    m_surface = NULL; 

    loadedImage = IMG_Load(t_filename.c_str()); 
    if(loadedImage != NULL) 
    { 
    std::clog << "--Surface was loaded." << std::endl; 
    m_surface = SDL_DisplayFormatAlpha(loadedImage); 
    SDL_FreeSurface(loadedImage); 
    return true; 
    } 
    std::clog << "--Surface was not loaded." << std::endl; 
    return false; 
} 
+0

우리에게 전체 Actor 클래스보기 –

+0

Actor.cpp http://pastebin.com/0PVhuYuU –

+0

Actor.h http://pastebin.com/ZzFsTTUF –

답변

0

이 나타납니다 당신의 SDL_DisplayFormatAlpha 반환 NULL.

이미지 변환을 시도하기 전에 SDL_SetVideoMode을 호출하지 않은 경우 이러한 현상이 발생할 수 있습니다.

NULL 반환 값이되는 다른 옵션은 메모리가 부족한 경우입니다.

+0

생성자에서 비디오 모드를 설정했습니다. 도와 주셔서 감사합니다. 나는 문제가 어디서 왔는지 좁힐 수있다. –

+0

SetVideoMode는 한 번만 호출해야하며, SDL_Init 옆으로 옮길 것을 제안합니다. – emartel

+0

SDL_SetVideoMode를 사용하여 비디오 화면의 너비, 높이 및 플래그를 변경하면 안됩니까? –

관련 문제