Segmentation fault an Stelle ohne Speicherzugriff

Decelion

Grünschnabel
Hi
Ich stehe vor einem sehr seltsamen Problem.
Ich bin gerade dabei, mit Allegro und C++ ein kleines Programm zum Darstellen einer einfachen tilebasierten Map zu erstellen, allerdings liegt das Problem vermutlich nicht bei Allegro.
Wenn ich den folgenden Code ausführe, erhalte ich einen Segmentation fault:

C++:
#include <iostream>
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>

using namespace std;

class Maptile
{
	public:
		ALLEGRO_BITMAP * tile;
		ALLEGRO_BITMAP * hWall;
		ALLEGRO_BITMAP * vWall;
		
		Maptile();
};

const int SCREEN_W = 640;
const int SCREEN_H = 480;
const int FPS=60;
const bool DEBUG = true;

bool key[10];
	
enum myKeys
{
	UP,
	DOWN,
	LEFT,
	RIGHT,
	V,
	ESC,
	SPACE,
	K1,
	K2,
	K3
};

int main( void )
{
	for(int i = 0; i<10; i++)
		key[i]=false;
	al_init();
	al_init_image_addon();
	ALLEGRO_DISPLAY * display = al_create_display(SCREEN_W, SCREEN_H);
	ALLEGRO_TIMER * timer = al_create_timer(1.0/FPS);
	ALLEGRO_EVENT_QUEUE * events = al_create_event_queue();
	al_set_target_bitmap(al_get_backbuffer(display));
	ALLEGRO_BITMAP * tiles[3];
	tiles[0]=al_load_bitmap("img/floor.png");
	cout <<"1fertig\n";
	tiles[1]=al_load_bitmap("img/hWall.png");
	cout <<"2fertig\n";
	tiles[2]=al_load_bitmap("img/vWall.png");
	cout <<"3fertig\n";
// hier liefert er mir den Segfault
	cout << "wat\n";
}


Maptile::Maptile()
{
	this->tile = NULL;
	this->vWall = NULL;
	this->hWall = NULL;
}

Der Segfault ereignet sich am ende des geposteten Codes, nach dem cout<<"3fertig\n";
In der Konsole sieht das ganze so aus:

[feider@stonehenge maptest]$ ./map
1fertig
2fertig
3fertig
Segmentation fault

Der Quellcode geht nach der Segfault-Stelle noch weiter, aber das habe ich der Übersichtlichkeit wegen weg gelassen, da es wahrscheinlich mit dem Segfault nichts zu tun hat.

Hat jemand eine Idee, woran das liegen könnte?

lg
Dece
 
Poste doch bitte den kompletten Code. Insbesondere den, der nach der Ausgabe kommt. Der Code, den du dort zeigst kann nicht segfaulten. Hast du es schon mit einem Debugger versucht?
 
Der Segfault ereignet sich am ende des geposteten Codes, nach dem cout<<"3fertig\n";
In der Konsole sieht das ganze so aus:

Kleiner Hinweis am Rande. Du kannst daraus nicht sagen, dass der Segmentation fault danach kommt. Das Programm sammelt in der Regel so lange wie möglich und nötig ausgaben, um diese in einem Rutsch auszugeben. Wenn du wirklich mit cout testen willst nach bzw in welchen Funktionen der Fehler auftritt, dann nutze "flush" oder "endl", denn diese Funktionen veranlassen, dass die derzeitige "gesammelte" Ausgabe auch ausgegeben wid, bevor im Programm weiter gegangen wird.
Daher auch der Hinweis von Saftmeister, mehr Code zu zeigen.

Grüße
 

Neue Beiträge

Zurück