C++ C+中的分段错误+;SDL项目

C++ C+中的分段错误+;SDL项目,c++,function,segmentation-fault,sdl,C++,Function,Segmentation Fault,Sdl,为什么我在这个函数中有一个分段错误,特别是在DisplayFormat函数中?我已经多次遇到这个问题,不知道如何解决它 SDL_Surface* imageBlitingFunctions::loadIMG(std::string filename) { SDL_Surface *img = IMG_Load(filename.c_str()); SDL_Surface *imgOPT = SDL_DisplayFormat(img); SDL_FreeSurface

为什么我在这个函数中有一个分段错误,特别是在DisplayFormat函数中?我已经多次遇到这个问题,不知道如何解决它

SDL_Surface* imageBlitingFunctions::loadIMG(std::string filename)
{
    SDL_Surface *img = IMG_Load(filename.c_str());

    SDL_Surface *imgOPT = SDL_DisplayFormat(img);

    SDL_FreeSurface(img);

    return imgOPT;
}

按如下方式更改代码

SDL_Surface* imageBlitingFunctions::loadIMG(std::string filename)
{
    SDL_Surface *img = IMG_Load(filename.c_str());
    if(img == NULL) {
        std::cerr << "ERROR: image load failed: " << SDL_GetError() << std::endl;
        return NULL;
    }

    SDL_Surface *imgOPT = SDL_DisplayFormat(img);

    SDL_FreeSurface(img);

    return imgOPT;
}
SDL_Surface*imageblingfunctions::loadIMG(std::string filename)
{
SDL_Surface*img=img_Load(filename.c_str());
如果(img==NULL){

std::cerr您是否检查了
img!=0
?否,正如您所看到的,我在函数内声明了指针。@黑剑“否,正如您所看到的,我在函数内声明了指针。”这会以何种方式阻碍您对
img\u Load()的正确结果进行简单检查
?为什么不检查
img!=0
?这不会防止分段错误吗?文档明确告诉您,如果img\u Load未能加载图像,它将返回0。SDL\u Display还假定您提供了有效指针。如果不检查,它会自动出错。您有责任确保您有一个有效指针,这就是为什么您需要检查IMG_Load的返回值。