簡體   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