0

これは私の最初の経験なので、うるさくしないでください。
これは SIGSEGV の問題であり、クラス リンクでのみ表示されます。「SDL_surface *ScreenSurface」ポインタ内の問題。
ここにコードが続きます...

画面ヘッダー

class screen
{
public:
    screen();
    SDLclass_Window *MainWindow=NULL;
    SDL_Surface *ScreenSurface=NULL; //this is the problem pointer to the struct that cause error
    //Those pointer are't NULL, see below
    virtual ~screen();
protected:
private:
    const int SCREEN_WIDTH = 1280;
    const int SCREEN_HEIGHT = 726;
    bool init();
};

画面コード

screen::screen()
{

if(!init())
    {
        std::cout<<"ERROR at INIT";
        SDL_Delay( 4000 );
    }
else
    {
    bool quit=0;
    SDL_Event e;
    while (!quit)
        {
        SDL_UpdateWindowSurface(MainWindow);

            //Looking for events
            while( SDL_PollEvent( &e ) != 0 )
            {
                //User requests quit
                if( e.type == SDL_QUIT )
                {
                    quit = true;
                }
            }
        }
    }


this->~screen();
}
bool screen::init() //Initialization
{
    bool succses=1;
    if (SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        std::cout<< "SDL could not initialize! SDL_Error:"<< SDL_GetError()<<std::endl;
        succses=0;
        return succses;
    }
    MainWindow= SDL_CreateWindow( "Arachy: WIP Version", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN ); //Setting parameters to SDL_window
    if (MainWindow==NULL)
    {
        std::cout<<"can't create window"<<SDL_GetError()<<std::endl;
        succses=0;
        return succses;
    }
    else
    {
        //Get window surface
        ScreenSurface = SDL_GetWindowSurface( MainWindow );// telling ScreenSurface that it our main screen surface
    }

    return succses;
}

screen::~screen()
{
    SDL_Quit();
}

アクティビティ ヘッダー (上でクラス Screen で定義した SDL_Surface を使用する別のクラス)

class activity
{
public:
    activity();
    virtual ~activity();
protected:
private:
    screen mainScreen;
    void load();

};

アクティビティ コード(SDL_FillRect() で SDL_Surface を変更しようとしている後、デバッグ中に SIGSEGV シグナルを取得しました)

activity::activity()
{

    SDL_FillRect(mainScreen.ScreenSurface,NULL,SDL_MapRGB(mainScreen.ScreenSurface->format,255,000000,255));
}

調べてください...ありがとう

4

1 に答える 1