Seite 1 von 1
"Speicherschutzverletzung" ?
Verfasst: 23. August 2005 11:30
von jimmy
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
Verfasst: 23. August 2005 14:28
von FlorianBecker
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.
Verfasst: 23. August 2005 14:34
von jimmy
Mein Programm schmiert ja nicht ab. Ich kann es ruhig mit einem click auf den Button "Quit" beenden. Dann erst sehe ich "Speicherschutzverletzung"
Mal ne Frage generell: Muss ich die erstellten Objekte , Zeiger, ect selbst zerstören oder nicht?
Verfasst: 23. August 2005 14:35
von FlorianBecker
Oder nicht.
Verfasst: 23. August 2005 20:56
von kowi1134
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!!!):
Code: Alles auswählen
QPushButton *okButton;
connect(okButton, SIGNAL(...), this, SLOT(...));
delete okButton;
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