PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] C++/Qt: Prozess nach Erhalt eines Signals vom Bet.-Sys. angehalten. Signal: SIGSEGV



Trauerkloß
07.12.2016, 14:05
Hallo,
ich habe in C++ mit Qt ein Konsolenprogramm geschrieben.
wenn ich jetzt was in das Konsolenprogramm reinschreibe und mit Enter abschicke, bekomme ich folgende Meldung:

Der Prozess wurde nach Erhalt eines Signals vom Betriebssystem angehalten.
Name des Signals: SIGSEGV
Bedeutung: Segmentation fault.

Wenn ich in der Meldung auf OK klicke bekomme ich eine Liste angezeigt. Über den Einträgen in der Liste steht "Function: libstdc". Eine Zeile in der Liste ist auch markiert:
0x6fcc82b4 <+0x0000> mov -0xc(%eax),%eax

ich weiß leider nicht weiter und bitte um Hilfe!

danke!

Ceos
07.12.2016, 14:20
du hast versucht in einen geschützten Speicher zu schrieben, da ist wohl irgendwie eine Dereferenzierung oder ein Pointer verbogen!

shedepe
08.12.2016, 13:18
1. Starte das Programm doch mit dem Debugger, damit bekommst du sinnvolle Informationen
2. Ein Segfault bedeutet, wie Ceos schon gesagt hat: Du hast in geschützten Speicher geschrieben. In der Regel passiert, dass weil man z.B. einen Null bzw. nicht allokierten Pointer versucht zu dereferenzieren. Es kann auch passieren wenn man über ein Array oder einen C-String herausschreibt. Also mehr Daten reinschreiben will als das Array lang ist.

Trauerkloß
10.12.2016, 13:58
Danke für eure Antwortet. Ich musste es leider neu schreiben da ich den Fehler nicht gefunden habe.

Ich habe da eine andere Frage. Wenn ich das Consolenprogramm beende (auf das X klicke), dann kommt folgende Meldung:
"Der Gdb-Prozess wurde unerwartet beendet (0)"

Wieso kommt das und wie verhindere ich diese Meldung?

danke!

shedepe
10.12.2016, 14:08
Die Meldung kommt nur duch den Debugger. Sobald du das Programm ohne Debugger ausführst kommt diese Meldung nicht mehr. Die Meldung deutet aber daraufhin, dass dein Programm unsauber terminiert.
Zu dem Thema: https://doc.qt.io/qtcreator/creator-debugger-engines.html
https://doc.qt.io/qtcreator/creator-debugging.html

Trauerkloß
12.12.2016, 12:08
Danke shedepe.

Mit der Anweisung "Return 0;" bleibt die Meldung weg.
Nur leider kann ich das nicht anwenden da das Consolenprogramm in einer Endlosschleife läuf, damit mehrere Datensätze angelegt werden können. Gibts da noch eine Möglichkeit?

shedepe
12.12.2016, 15:46
1. Zeig Code wie soll man dir sonst helfen
2. Wenn du eine Endlosschleife hast: Wie beendest du dann dein Programm ?

Trauerkloß
13.12.2016, 14:08
shedepe, ich beende es mit dem X in der Titelleiste.
Das funktioniert auch, nur bekomme ich jedes mal die Meldung "Der Gdb-Prozess wurde unerwartet beendet (0)"

Die endlosschleife verwende ich, damit das Programm nicht gleich beendet wird. Ich will nämlich Daten eingeben (Kleidung)

shedepe
13.12.2016, 15:21
Wie gesagt: Wenn du das Programm mit dem Debugger startest kommt diese Meldung. Dein Klick auf das X sorgt nämlich nicht dafür dass das Programm sauber mit Exit Code 0 beendet wird, sondern beendet den Prozess mehr oder weniger gewaltsam. Du könntest .z.B. in deinem Programm eine Konsoleneingabe abfragen in der Endlosschleife und z.B. auf den Bustaben q oder die Zeichenfolge quit hin beenden.

Trauerkloß
15.12.2016, 13:42
shedepe, so habe ichs auch getan. So kann man's stehen lassen :)