Hi, ich habe folgendes Problem:
Wenn ich mein Qt-programm beende , sehe ich in der Linux-konsole "Speicherschutzverletzung"
Ich hab da nicht wirklich viel Ahnung..
Könnte es an Zeigern liegen wie z.B QLabel *label= new QLabel; ?
Muss ich vielleicht Dekonstructoren aufrufen ? Irgendwas löschen?
Vielen Dank im voraus
"Speicherschutzverletzung" ?
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Du musst erstmal feststellen woher das Problem kommt.
Führe das Programm einmal mit gdb appName aus und gib back ein, wenn die Speicherverletzung eingetreten ist. Dort steht wo er genau abschmiert.
Das Programm sollte mit den Debug Bibliotheken kompiliert werden, damit du auch genügend Informationen über dein Problem erhältst.
Oder, 2. Möglichkeit:
Du schreibst Zeile für Zeile etwas wie qDebug( Zeile ); und guckst wo genau er abschmiert, die Zeile danach ist dann das Problem.
Führe das Programm einmal mit gdb appName aus und gib back ein, wenn die Speicherverletzung eingetreten ist. Dort steht wo er genau abschmiert.
Das Programm sollte mit den Debug Bibliotheken kompiliert werden, damit du auch genügend Informationen über dein Problem erhältst.
Oder, 2. Möglichkeit:
Du schreibst Zeile für Zeile etwas wie qDebug( Zeile ); und guckst wo genau er abschmiert, die Zeile danach ist dann das Problem.
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Hallo!
Ich antworte einfach mal drauf los, ok?
Es kommt ja zunächst mal ganz darauf an, ob Du Speicher "selbst" reserviert hast oder nicht. Wenn ja, dann tritt eine Speicherplatzverletzung häufig dann auf, wenn Du Speicher explizit z.B. mit löscht.
Beachte hierbei, dass Arrays mit gelöscht werden müssen!
Es kann auch sein, dass Du bei einem Aufruf von einen Zeiger auf ein Objekt übergibst, dass Du noch nicht angelegt hast, sondern für das bisher nur der Zeiger existiert. Beispiel (ACHTUNG FALSH!!!): Beides, sowohl der connect()-Aufruf als auch das delete würden eine Speicherplatzverletzung hervorrufen.
Ich hoffe, dass ich Dir damit ein bisschen helfen konnte.
Ciao
Ich antworte einfach mal drauf los, ok?
Es kommt ja zunächst mal ganz darauf an, ob Du Speicher "selbst" reserviert hast oder nicht. Wenn ja, dann tritt eine Speicherplatzverletzung häufig dann auf, wenn Du Speicher explizit z.B. mit
Code: Alles auswählen
deleteBeachte hierbei, dass Arrays mit
Code: Alles auswählen
delete [] DeinArray;Es kann auch sein, dass Du bei einem Aufruf von
Code: Alles auswählen
connect()Code: Alles auswählen
QPushButton *okButton;
connect(okButton, SIGNAL(...), this, SLOT(...));
delete okButton;Ich hoffe, dass ich Dir damit ein bisschen helfen konnte.
Ciao