tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
2365
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kle-ben kle-ben ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    492
    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
     
    Theorie ist Wissen, das nicht funktioniert.
    Praxis ist, wenn alles funktioniert und man weiß nicht warum

  2. #2
    Registriert seit
    Apr 2002
    Ort
    Delmenhorst (Niedersachsen)
    Beiträge
    3.567
    moin


    Welche Entwicklungsumgebung benutzt du?


    mfg
    umbrasaxum
     

  3. #3
    kle-ben kle-ben ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    492
    Editor >> kwrite
    Compiler >> gnu
     
    Theorie ist Wissen, das nicht funktioniert.
    Praxis ist, wenn alles funktioniert und man weiß nicht warum

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    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 :
    1
    
    gdb ./deinprogram

    oder mit grafischen Frontend:
    Code :
    1
    
    ddd ./deinprogram

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

    und der ddd ist selbsterklärend...

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  5. #5
    Registriert seit
    Jan 2002
    Ort
    Bayern
    Beiträge
    1.390
    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
     
    we would change the world if god gave us the source code...
    and remember, science is nothing more than reverse engineering nature...

    Current projects:
    - LdrawConverter

  6. #6
    kle-ben kle-ben ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    492
    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
     
    Theorie ist Wissen, das nicht funktioniert.
    Praxis ist, wenn alles funktioniert und man weiß nicht warum

  7. #7
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    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
     
    "I'm not deaf, I'm ignoring you"
    ----

  8. #8
    kle-ben kle-ben ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    492
    Wieso kann ich aber mein Programm im gdb öffnen
    aber nicht im ddd ?

    Gruß Benny
     
    Theorie ist Wissen, das nicht funktioniert.
    Praxis ist, wenn alles funktioniert und man weiß nicht warum

  9. #9
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    entweder:

    Code :
    1
    
    ddd ./deinprogram

    oder im ddd:

    "File->Open Program"

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


    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  10. #10
    kle-ben kle-ben ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    492
    Der sagt mir immer Datei oder Verzeichnis nicht gefunden!
    Selbst wenn ich es mit Datei >Programm öffnen mache.

    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
     
    Theorie ist Wissen, das nicht funktioniert.
    Praxis ist, wenn alles funktioniert und man weiß nicht warum

  11. #11
    Avatar von mamarulez
    mamarulez mamarulez ist offline Mitglied Bronze
    Registriert seit
    Nov 2003
    Ort
    Bonn (NRW)
    Beiträge
    41
    Ein "Segmentation Fault"-Error bedeutet bei SDL fast immer, dass ein typischer Windows "Blue Screen" verhindert wird (ich weiß, dass du Linux verwendest...), also ein unzulässiger Speicherzugriff, wie du richtig erkannt hast.

    Da du erwähnst, dass dieser Fehler vorkommt, wenn du den Spieler in die oberste bzw. unterste Zeile stellst, vermute ich eventuell einen Array-Fehler (zum Beispiel "int array[5]" wird mit "array[5]" angesprochen etc.). Du benutzt doch sicherlich Arrays in irgendeiner Form um die Spieler-Position oder die Felder (Tiles) zu speichern?

    Hast du immer bedacht, dass ein Array in C++ bei 0 anfängt? Also, dass "int array[5]" die Elemente von 0 bis 4 besitzt? Zu leicht passiert es einem, dass man in einer Schleife zum Beispiel so was macht: "for ( int i = 0; i < 5; i++ ) array[i] = 1;" Das würde in solch einem Fehler enden.

    Ich hoffe ich konnte irgendwie helfen!
     

  12. #12
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,
    Zitat Zitat von kle-ben
    Der sagt mir immer Datei oder Verzeichnis nicht gefunden!
    Selbst wenn ich es mit Datei >Programm öffnen mache.
    der Fehler kommt bei mir auch. Es geht aber trotzdem zu debuggen...

    Zitat Zitat von kle-ben
    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
    Nachdem dir dein Programm abgestürzt ist kannst du dir mit dem Befehl
    "where" im gdb den Funktionaufrufsstack anschauen. Da sollten
    auch die Zeilennummern stehen, vorrausgesetzt du hast mit -g kompiliert....

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

Ähnliche Themen

  1. [C++] Speicherzugriffsfehler
    Von FBIagent im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 26.03.08, 13:16
  2. Speicherzugriffsfehler
    Von NoPanic2007 im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 11.09.07, 11:11
  3. Speicherzugriffsfehler
    Von sunmania im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 25.06.07, 10:13
  4. Cedega - Speicherzugriffsfehler?
    Von _henrik im Forum Linux & Unix
    Antworten: 0
    Letzter Beitrag: 22.07.05, 13:26
  5. Speicherzugriffsfehler
    Von vaporizer im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 27.05.04, 10:02