程序收到信号 SIGSEGV,getter 方法中的分段错误

Program received signal SIGSEGV, Segmentation fault in getter method

我正在使用 Code::Blocks 制作游戏,遇到了分段错误。我在这里查看了其他问题,但找不到任何有用的信息。我有一个代表游戏中基本对象的 Sprite class 和一个控制游戏屏幕显示的 Window class 。我 运行 调试器,它在下面 getImage() 方法的 return image; 行给了我错误。

SDL_Surface* Sprite::getImage() {
    return image;
}

我在 Sprite 的构造函数中调用了以下 setImage() 方法,我验证了 SDL_ConvertSurface 没有 return NULL.

void Sprite::setImage(string path) {
    SDL_Surface* loadedSurface = IMG_Load( path.c_str() );
    if( loadedSurface == NULL ) {
        printf( "Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError() );
    } else {
        image = SDL_ConvertSurface( loadedSurface, surface->format, NULL );
        if( image == NULL ) {
            printf( "Unable to optimize image %s! SDL Error: %s\n", path.c_str(), SDL_GetError() );
        }

        SDL_FreeSurface( loadedSurface );
    }
}

我在Windowmainloop()中调用方法getImage(),如下图,其中sprites声明为Sprite* sprites[10];

void Window::mainloop() {
    bool quit = false;
    SDL_Event e;

    while( !quit ) {
        while( SDL_PollEvent( &e ) != 0 ) {
            if( e.type == SDL_QUIT ) {
                quit = true;
            }
        }

        SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, red, green, blue ) );

        for (int i = 0; i < spritesNum; i++) {
            SDL_BlitScaled( sprites[spritesNum]->getImage() , NULL, screenSurface, sprites[spritesNum]->getRect() );
        }

        SDL_UpdateWindowSurface( window );
    }
}

您的索引可能超出范围

for (int i = 0; i < spritesNum; i++) {
    SDL_BlitScaled( sprites[spritesNum]->getImage() , NULL, screenSurface, sprites[spritesNum]->getRect() );
}

我假设您想使用计数器 i?

for (int i = 0; i < spritesNum; i++) {
    SDL_BlitScaled( sprites[i]->getImage() , NULL, screenSurface, sprites[i]->getRect() );
}

否则,如果您的数组 sprites 的长度为 spritesNum,则您的索引超出了范围,并且这样做了 spritesNum 次。

无论如何,您至少应该确认您没有在此处取消引用空指针

sprites[i]->getImage()