C++ SDL Speicherzugriffsfehler

kle-ben

Erfahrenes Mitglied
Hi!
Ich versuche gerade eine eigene "move the boxes" Version
mit c++ und Sdl unter Linux zu erstellen.
Es funktioniert auch alles soweit ganz gut, nur erhalte ich
beim verlassen des Programms ab und zu einen Speicherzugriffsfehler.
Was nicht weiterhin stören würde wenn es nur beim
Verlassen des Spieles wäre. Wenn ich mein Männchen
während des Spieles in die oberste bzw. unterste Reihe
setze wird das Spiel beendet und ich erhalte:

Fatal signal: Segmentation Fault (SDL Parachute Deployed)

was meinen Informationen nach auch ein Speicherzugrifsfehler
ist. Allerdings hab ich keine Ahnung an welcher Stelle
in meinem Programm der auftritt. Meine Frage jetzt:
Weiß jemand worauf man besonderst achten muss?
Also wo solche Fehler gerne auftreten?
Oder kann mir vieleicht jemand sagen wie ich das
Programm im debugger ddd aufrufen kann um es dort zu testen?

Danke schon mal!

Gruß Benny
 
Hallo,

am besten du verwendest den gdb oder den ddd (wie du schon geschrieben
hast).

Du musst dein Programm mit der Option -g kompilieren und dann den
Debugger starten:

Code:
gdb ./deinprogram

oder mit grafischen Frontend:
Code:
ddd ./deinprogram

Wie man den gdb verwendet kannst du hier nachlesen:
http://shekel.jct.ac.il/cc-res/online-doc/gdb/gdb_toc.html

und der ddd ist selbsterklärend...

Gruß

RedWing
 
Hast du dein Spiel schon mal im GDB gestartet?
Wenn nicht, dann versuch das mal, setzt dich mal mit dem GNU-Debugger auseinander, der "fängt" nämlich die Signale (in dem Fall SIGNAL 11=Segmentation Faul=Speicherzugriffsfehler)
Wenn der GDB das Signal fängt, dann bleibt er in der Regel in der entsprechenden Codezeile stehen und du kannst dir auch nen Backtrace geben lassen.
Vorraussetzung dafür ist natürlich, dass du dein Code mit Debug-Symbolen übersetzt.

Daniel
 
Moin
Danke für die Tipps, ich hab das Programm mit dem gdb
gestartet und der sagt mir nun in welcher Funktion der
Fehler ist. Hab den nun behoben.
Allerdings hab ich das Programm nur mit run einfach
ablaufen lassen, ohne irgendwelche Breakpoints zu
setzten.
Kennt ihr zufällig eine gute Deutsche seite über den gdb?
Denn meinem Eindruck nach scheint man mit dem
einiges mehr machen zu können als mit dem ddd,
stimmt das? Da ich allerdings erst seit 2-3 Wochen
unter Linux arbeite, und total das Mauskind bin, ist
das mit der Konsolensteuerung noch recht ungewohnt.
Und wenn dann noch alles auf Englisch erklärt ist..muhaha

Also dann Danke für eure Hilfe!

Gruß Benny
 
Hallo,
Denn meinem Eindruck nach scheint man mit dem
einiges mehr machen zu können als mit dem ddd,
stimmt das?

Mit dem ddd kann man genau das auch machen was man mit dem gdb machen
kann.
Wenn du mal im ddd im unteren Teil des Fensters schaust, wirst du das Prompt
des gdb wiedererkennen... ddd ist wie gesagt nur das grafische Frontend des gdb
und da es auch das Eingabeprompt des gdb's zur Verfügung stellt ist der ddd
gleichmächtig.

Kennt ihr zufällig eine gute Deutsche seite über den gdb?

google gibt da denke ich ausreichend Antworten...

Gruß

RedWing
 
Hallo,

entweder:

Code:
ddd ./deinprogram

oder im ddd:

"File->Open Program"

dein Programm auswählen und dann mit run starten oder
über die buttons ...


Gruß

RedWing
 
Der sagt mir immer Datei oder Verzeichnis nicht gefunden!
Selbst wenn ich es mit Datei >Programm öffnen mache.
:confused:
Aber im gdb läuft es ab. Allerdings gibt er mir wenn dann nur
die Funktion aus in der der Fehler auftritt aber nicht die Zeile.

Gruß Benny
 
Zurück