[C++]-[SDL] Segfault beim Abfragen auf neue Events

Servus
Ich wollte ein kleines Spiel programmieren, hänge aber leider kurz vorm Ende an der Nachrichtenschleife fest. Wisst ihr woran das liegen könnte?
Code:
void Controller::run() {

	if (SDL_Init(SDL_INIT_EVERYTHING) == -1) {
		printf("Can't init SDL: %s", SDL_GetError());
		exit(1);
	}
	atexit(SDL_Quit);

	//float sTime, eTime, dTime;

	view::View *view = new view::View();
	model::Model *model = new model::Model();

	SDL_Event event;
	bool doExit = false;

	while (!doExit) {
		//sTime = SDL_GetTicks();

		while (SDL_PollEvent(&event)) {
			switch (event.type) {
			case SDL_KEYDOWN:
				switch (event.key.which) {
				case SDLK_ESCAPE:
					doExit = true;
					break;
				}
				case SDL_QUIT:
					doExit = true;
					break;
			}
		}

		//Move(dTime) //Später für KI !!
		//model::Playfield p = {{},{},{}};
		printf("B-Ticks: %d",SDL_GetTicks());
		view->draw(model->getField());
		printf("A-Ticks: %d",SDL_GetTicks());

		//eTime = SDL_GetTicks();
		//dTime = (eTime - sTime);
	}

}
Code:
Thread [1] (Suspended: Signal 'SIGSEGV' received. Description: Segmentation fault.)	
	16 <symbol is not available> 0xb7ccbc40	
	15 malloc()  0xb7ccd9c5	
	14 <symbol is not available> 0xb79e5e5a	
	13 xcb_poll_for_event()  0xb79e62a0	
	12 <symbol is not available> 0xb7a37459	
	11 <symbol is not available> 0xb7a3775e	
	10 _XEventsQueued()  0xb7a380e5	
	9 _XFlush()  0xb7a38179	
	8 XFlush()  0xb7a0fe21	
	7 <symbol is not available> 0xb7f2f1ce	
	6 <symbol is not available> 0xb7f329a2	
	5 <symbol is not available> 0xb7f33cbb	
	4 SDL_PumpEvents()  0xb7f010cd	
	3 SDL_PollEvent()  0xb7f01597	
	2 controller::Controller::run() /home/mrspider/workspace/TicTacToe/Controller.cpp:40 0x08048c7f	
	1 main() /home/mrspider/workspace/TicTacToe/main.cpp:6 0x0804989e

Kompletter Code: http://rapidshare.com/files/212666565/TTT.tar.bz2
 
Ich musste die SDL/SDL_gfxPrimitives.h entfernen, damit es bei mir kompiliert, da ich diesen nicht installiert habe. Aber es geht ja auch um die controller-Funktion.

Die Fehlermeldung sagt aus, dass das Programm genau an
Code:
while (SDL_PollEvent(&event))
crasht.
Der Fehler liegt aber scheinbar woanders. Bei mir crashte das Programm zwar nicht, aber die Tasten waren tot.
Merkwürdigerweise gings, nachdem ich
Code:
model::Model *model = new model::Model();
auskommentiert habe. Schau dir mal die Funktionen an, die da dran hängen. Müsste dann an Field::Field() liegen, aber das überlasse ich dir. ^^

Btw.:
Code:
printf("B-Ticks: %d",SDL_GetTicks());
view->draw(model->getField());
printf("A-Ticks: %d",SDL_GetTicks());
Das würde ich nicht tun.
A: Keine Zeilenumbrüche (nicht besonders leserlich, oder?)
B: Bei einem 2D Spiel holst du locker >100 fps raus, also 200 Ausgaben pro Sekunde. Ich würde sagen, dass das ein bischen viel ist. O.o
 
Danke; werde mir das gleich noch einmal anschauen !!
Die Ausgaben waren standarmäßig nicht geplant; Nur kurz zum testen(Fehlersuche xD)

EDIT:
Hab den Fehler gefunden:
field war nicht initialisiert.

Noch eine kleine Frage zum Abschluss:
Code:
typedef FieldState Playfield[3][3];
Playfield* field;
...
field = new Playfield[3];
Warum muss ich hier field mit new Playfield[3] initialisieren? Eigentlich müsste es doch so aussehen:
Code:
field = new Playfield;
oder?
Aber wenn ich es so mache bekomme ich folgenden Fehler:
Code:
?model::FieldState (*)[3]? kann nicht nach ?model::FieldState (*)[3][3]? in assignment umgewandelt werden
 
Zurück
Oben