Fatal signal: Segmentation Fault (SDL Parachute Deployed)
Verfasst: 09.07.2007 20:09
Nachdem ich nun vollkommen entnervt und mit x Versuchen nach eigenen Fehler gesucht habe, weiß ich einfach nicht mehr weiter...
Ich benutzer Dev-C++ mit SDL Version 1.2.8 . Ich verwende eigentlich nur den direkten Zugriff auf den Grafikspeicher mit Lock/Unlock/usw. und muss sagen, dass mein Code EIGENTLICH funktioniert.
Ich habe eine Klasse für einen Renderer erstellt, die mit einem Befehl Farben im Float-Format in den SDL-Buffer schreibt. Wenn ich die Klassen-internen Bufferpointer NICHT erhöhe, klappt der Code wunderbar und ich sehe mein gerendertes Bild. Wenn ich aber die Pointer auf Klassen-interne Buffer mit jedem PIxel (logischweise) erhöhe, erhalte im "stderr.txt"-Logfile den folgenden Fehler:
Fatal signal: Segmentation Fault (SDL Parachute Deployed)
und das Programm wird ohne Wenn und Aber (anscheinden von SDL selbst) geschlossen. Der Code der Funktion:
Ich weiß, ohne die restlichen Definitionen der Klasse usw. ist er recht unbrauchbar... Aber ev. hilft es. Mein Code ist schon recht groß und würde vermutlich den Rahmen des spontan zumutbaren sprengen...
Kann mir da irgendwer helfen? Ich hab einfach keine Ahnung, was das soll. Selbst die Größen, der allokierte Speicher, die Speicherposition, usw... stimmen eigentlich alle. Ich sehe darin keinen logischen Fehler!
Ich benutzer Dev-C++ mit SDL Version 1.2.8 . Ich verwende eigentlich nur den direkten Zugriff auf den Grafikspeicher mit Lock/Unlock/usw. und muss sagen, dass mein Code EIGENTLICH funktioniert.
Ich habe eine Klasse für einen Renderer erstellt, die mit einem Befehl Farben im Float-Format in den SDL-Buffer schreibt. Wenn ich die Klassen-internen Bufferpointer NICHT erhöhe, klappt der Code wunderbar und ich sehe mein gerendertes Bild. Wenn ich aber die Pointer auf Klassen-interne Buffer mit jedem PIxel (logischweise) erhöhe, erhalte im "stderr.txt"-Logfile den folgenden Fehler:
Fatal signal: Segmentation Fault (SDL Parachute Deployed)
und das Programm wird ohne Wenn und Aber (anscheinden von SDL selbst) geschlossen. Der Code der Funktion:
Code: Alles auswählen
void LE::LE_Renderer::Swap()
{
pixel_screen* pos_screen = screen;
pixel_alpha* pos_alpha = alpha;
Uint8* pos_app = (Uint8*) surface->pixels;
float alpha_screen;
// jeden pixel im surface durchgehen und mit errechnetem farbwert beschreiben
for (int pxcount = 0; pxcount < pixels; pxcount++)
{
cerr << pxcount << "/" << pixels
<< " alpha: " << pos_alpha << "/" << end_alpha
<< " screen: " << pos_screen << "/" << end_screen <<endl>a;
// temporär weggekürzt!
pos_app[0] = 255;
pos_app[1] = 0;
pos_app[2] = 255;
pos_app[3] = 255;
pos_screen += sizeof(pixel_screen);
pos_alpha += sizeof(pixel_alpha);
pos_app += surface->format->BytesPerPixel;
}
}
Kann mir da irgendwer helfen? Ich hab einfach keine Ahnung, was das soll. Selbst die Größen, der allokierte Speicher, die Speicherposition, usw... stimmen eigentlich alle. Ich sehe darin keinen logischen Fehler!