Schutzverletzung bei Allegro Bildupdate-Timer



  • Hallo zusammen.

    Ich mache gerade meine ersten Erfahrungen mit Allegro, und dachte mir, warum nicht einen Timer all x Milisekunden den "screen" von einem Buffer updaten lassen?

    Ich hab das jetzt auch umgesetzt, doch jedesmal wenn ich [ESC] drücke gibt mir meine IDE (Code::Blocks, mingw) die Fehlermeldung

    Program received signal SIGSEGV, Segmentation fault.

    Ich habe keine Ahnung woran das liegen könnte.

    Hier noch mein c++ Code:

    #include <allegro.h>
    
    BITMAP *Buffer;
    
    void DrawScreen(void);
    
    int main(){
    
        allegro_init();
        install_timer();
        install_keyboard();
        set_color_depth(32);
        set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
    
        int Richtung=10, x=0;
    
        BITMAP *Bild;
        BITMAP *Hintergrund;
    
        Buffer = create_bitmap(640, 480);
        LOCK_FUNCTION(DrawScreen);
        install_int(DrawScreen,10);
    
        Bild=load_bitmap("Char_1.bmp", NULL);
        Hintergrund=create_bitmap(640, 480);
    
        while( !key[KEY_ESC])
        {
               draw_sprite(Buffer, Hintergrund,0,0);
               draw_sprite(Buffer, Bild, x,0);
    
               x+=Richtung;
               if(x>(640-(Bild->w)) || x<0) Richtung*=-1;//Bild stößt an einen Bildschirmrand
               _sleep(100);
        }
    
        destroy_bitmap(Bild);
        destroy_bitmap(Hintergrund);
        return 0;
    }
    END_OF_MAIN();
    
    void DrawScreen(void)
    {
        draw_sprite(screen,Buffer,0,0);
    }
    

  • Mod

    hast du vergessen den timer abzustellen bevor du alles was drawscreen benutzt loescht?



  • Hi!

    rapso hat schon den Fehler lokalisiert, aber hier die benötigte Funktion:

    remove_int(DrawScreen);
    

    ...am Ende des Programms.

    MfG
    Heringsalat100

    für weitere Infos: http://alleg.sourceforge.net/latestdocs/en/alleg005.html#remove_int



  • Ja, damit geht es, vielen dank euch beiden 👍


Anmelden zum Antworten