Problem mit SDL Programm
-
Hi !
Falls das hier ins C Forum sollte dann bitte verschieben. Bin mir jetzt nicht sicher wo es hin soll.
Da ich gerade mit SDL angefangen habe habe ich einige einfache Programm geschrieben. Nun bin ich bei Event angekommen. Also habe ich das Bsp Programm (http://sdldoc.csn.ul.ie/guideinputkeyboard.php#AEN356) aus der Doku mal kurz nachprogrammiert.
So sieht meine Version aus:
#include "SDL.h" #include <stdlib.h> main() { SDL_Event* event; int quit = 0; /* Initialise SDL */ if( SDL_Init( SDL_INIT_VIDEO ) ){ fprintf( stderr, "Could not initialise SDL: %s\n", SDL_GetError() ); exit( -1 ); } /* Set a video mode */ if( !SDL_SetVideoMode( 320, 200, 0, 0 ) ){ fprintf( stderr, "Could not set video mode: %s\n", SDL_GetError() ); SDL_Quit(); exit( -1 ); } printf("#1\n"); SDL_EnableUNICODE( 1 ); while( !quit ) { printf("#2\n"); while( SDL_PollEvent( event ) ) { printf("#3\n"); switch( event->type ) { case SDL_QUIT: quit = 1; break; default: break; } } } SDL_Quit(); exit(0); }
In dieser Version erhalte ich einen Segmentation Fault nach printf("#2\n");
In dieser Version ( der Unterschied ist nun, dass ich keinen Pointer SDL_Event* event erstelle ). Dann allerdings funktionerts ?
#include "SDL.h" #include <stdlib.h> main() { SDL_Event event; int quit = 0; /* Initialise SDL */ if( SDL_Init( SDL_INIT_VIDEO ) ){ fprintf( stderr, "Could not initialise SDL: %s\n", SDL_GetError() ); exit( -1 ); } /* Set a video mode */ if( !SDL_SetVideoMode( 320, 200, 0, 0 ) ){ fprintf( stderr, "Could not set video mode: %s\n", SDL_GetError() ); SDL_Quit(); exit( -1 ); } printf("#1\n"); SDL_EnableUNICODE( 1 ); while( !quit ) { printf("#2\n"); while( SDL_PollEvent( &event ) ) { printf("#3\n"); switch( event.type ) { case SDL_QUIT: quit = 1; break; default: break; } } } SDL_Quit(); exit(0); }
Wie kann das sein?
Tom
-
Weil in der ersten Version der Zeiger irgendwo hin zeigt, wo er nicht hinzeigen soll. Das liegt daran, dass du ihn nicht initialisiert hast. Die SDL_PollEvent-Funktion füllt eine SDL_Event-Struktur, die per Zeiger übergeben wird, mit Daten. Falls aber für den Zeiger gar kein Speicher reserviert wurde, werden irgendwelche zufälligen Speicherstellen vollgeschrieben. Die zweite Version ist richtig, hier wird Speicher auf dem Stack reserviert. Beim der ersten Version wird garkein Speicher reserviert.
geloescht
-
danke, ich bin oop programmierung gewöhnt :p