奇怪的未处理异常;访问违规阅读位置

时间:2013-05-08 12:46:39

标签: c++ sdl

当我尝试调用SDL_DisplayFormatAlpha时,我得到这个未处理的异常:“herorpg.exe中的0x68125981(SDL.dll)处的未处理异常:0xC0000005:访问冲突读取位置0x0000013C。”

代码:

SDL_Surface* load_image ( char* filename ) {
    SDL_Surface* loadedImage = NULL;
    SDL_Surface* optimizedImage = NULL;
    loadedImage = IMG_Load ( filename );

    if ( loadedImage != NULL ) {
        optimizedImage = SDL_DisplayFormatAlpha ( loadedImage );
        SDL_FreeSurface ( loadedImage );
    }

    return optimizedImage;
}

bool init ( SDL_Surface*& screen ) {

    //Initialize SDL
    if ( SDL_Init ( SDL_INIT_EVERYTHING ) == -1 ) return false;
    screen = SDL_SetVideoMode ( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_FULLSCREEN );
    if ( screen == NULL ) return false;

    //Set the caption
    SDL_WM_SetCaption ( "Hero RPG", NULL );

    return true;
}

主:

int main ( int argc, char** argv ) {
init ( screen );

load_image ( "graphics\\background\\overworld" );

return 0;
}

其他:

如果我发表评论

    //if ( loadedImage != NULL ) {
    //  optimizedImage = SDL_DisplayFormatAlpha ( loadedImage );
    //  SDL_FreeSurface ( loadedImage );
    //}

并更改

    loadedImage = IMG_Load ( filename );

    optimizedImage = IMG_Load ( filename );

图像加载正常。所以我知道文件名没有问题。

问题:

这是我在上一个程序中使用的确切函数,上次运行正常。我认为对此的答案将是开箱即用的。为什么我会收到这个未处理的例外?

1 个答案:

答案 0 :(得分:1)

documentation中有这一行:

  

当然,在调用此函数之前,必须使用SDL_SetVideoMode初始化视频表面,否则它将发生段错误。

看到我在发布的代码中看不到对SDL_SetVideoMode的调用,我可以认为这可能是原因。