Frage

OK - ich habe eine interessante hier. Ich arbeite an einem tetris Klon (im Grunde auf „Level-up“ meine Fähigkeiten). Ich habe versucht, meinen Code Refactoring, um es den Weg abstrahiert ich es wollte. Es wurde zwar vor ganz gut funktioniert, jetzt bekomme ich einen Segmentation Fault, bevor irgendwelche Bilder Blitted werden können. Ich habe versucht, es ohne Erfolg debuggen.

Ich habe meine SVN Arbeitskopie des Projekts geschrieben hier .

Es ist nur ein kleines Projekt und jemand mit mehr Wissen als ich und einen guten Debugger wird es wahrscheinlich Figur im Handumdrehen aus. Die einzige Abhängigkeit ist SDL . Ein großes Lob an die Person, die mir sagen kann, was ich falsch mache.

Edit: Was ich sagen kann, was ich jetzt habe und was ich hatte, bevor es logisch die gleiche, also würde ich denke nicht, dass ich habe, was jetzt einen Segmentierungsfehler verursachen würde. Führen Sie einfach eine svn revert auf der Arbeitskopie, neu kompilieren und Sie können sehen, dass es funktioniert ...

War es hilfreich?

Lösung

Sehen Sie in Zeile 15 bis 18 von Surface.cpp:

    surface = SDL_DisplayFormatAlpha( tempSurface );
    surface = tempSurface;
}
SDL_FreeSurface( tempSurface );

Ich nehme an, es Segfaults, denn wenn man diese Fläche später verwenden zu können, ist auf tempSurface tatsächlich zu arbeiten, da diese Zeile:

surface = tempSurface;

und nicht die Oberfläche zurück von SDL_DisplayFormatAlpha (). Da Sie frei tempSurface, zeigt Fläche jetzt Speicher auf ungültig. Um dies zu beheben, einfach die zweite Zeile in dem anderen Block entfernen.

Andere Tipps

Ich habe keine SDL auf meinem Rechner installiert, aber durch den Code nach suchen.

Ich bemerkte dies in der Output.cpp-Datei:

display = new Surface();

Sie nichts zu tun. Der Konstruktor für diese ist leer. (Oberfläche ist nicht initialisiert).

Dann in Ausgabe :: initialisieren () Sie tun:

display->surface = SDL_SetVideoMode( 800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF );

Das sieht aus wie das Thema Oberflächen :: Oberfläche wurde eigentlich nie initialisiert. Wenn Sie die Lösung gefunden zu haben, wenn ich nach Hause komme, ich werde in digg es.

Soweit ich verstehe, geschieht ein Segmentierungsfehler, wenn Sie eine ponter mnaipulate versuchen, die nicht mehr verfügbar ist, oder Sie versuchen, den Wert einer Konstanten zu ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top