繁体   English   中英

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

[英]Program received signal SIGSEGV, Segmentation fault in getter method

我当时使用Code :: Blocks制作游戏,并遇到了Segmentation Fault错误。 我在这里浏览了其他问题,找不到任何帮助。 我有一个Sprite类,它表示游戏中的基本对象,还有一个Window类,用于控制游戏屏幕的显示。 我运行调试器,它在行return image;处给了我错误return image; 来自下面的getImage()方法。

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

我在Sprite的构造函数中调用了以下setImage()方法,并验证了SDL_ConvertSurface没有返回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 );
    }
}

我在Window mainloop()中调用方法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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM