Qt/C++ Beendet mit code -1073741819 (Programm stürzt ab, mit Ausnahme-code c0000005)
Ich habe Probleme mit meinem Programm zum Absturz zu bringen. Ich verstehe, dass "Program.exe hat aufgehört zu arbeiten" windows pop-up, die erwähnt meine Ausnahme-code c0000005. Wenn ich zurück in die Ausgabe der Anwendung in Qt, es zeigt:
C:\Users\Me\Desktop\project\project-build-desktop\debug\project.exe exited with code -1073741819
Fand ich die Zeile, die den Fehler verursacht (glaube ich!), obwohl ich nicht weiß, warum. Wenn ich diese Zeile auskommentieren, das Programm wird nicht Abstürzen.
Ist die Zeile:
db=newDb;
Diese befindet sich in dem Konstruktor meiner Klasse wndChildWhatever
die ein QMainWindow. newDb
ist definiert im Konstruktor Argumente als DatabaseManager *newDb
und db
ist ein privater member von wndChild definiert als DatabaseManager *db
. Diese Datenbank Adresse übergeben wird, um alle über mein Programm, und dieses wndChildWhatever
ist die einzige, die ich habe Probleme mit.
Ausnahme/Absturz tritt nicht auf, wenn das Fenster geöffnet wird/gebaut, jedoch. Es passiert, wenn das Fenster geschlossen ist. Was seltsamer ist, dass es nicht passieren jedes mal. Manchmal können Sie das Fenster öffnen und schließen, mit aus problem, dann öffnen Sie es wieder und auf der zweiten schließen, stürzt es ab. Andere Male ist es passiert, das erste mal, wenn Sie versuchen, um es zu schließen.
Ich bin wirklich nicht sicher, was hier Los ist und hoffe mir kann jemand helfen!
- Sie vergaß das Handtuch operator in Zeile 42.
- Führen Sie das Programm in einem debugger. Es wird sofort angehalten, wenn der AV passiert, keine raten beteiligt. Es wird auch versorgen Sie mit den call-stack und wahrscheinlich mit lokalen vars, zu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die fehlerhafte Zeile:
Und Sie sagen:
Es klingt wie Sie Ihre
this
pointer können ungültig sein. Das ist, wenn dies geschieht in einer Methodefoo
Sie etwas wiewndChild->foo()
undwndChild
ist ein Ungültiger Zeiger. Deshalb, wenn es den Zugriff auf die offsetdb
relativ zuwndChild
schlagen Sie greift auf eine Verletzung. (NT-Fehler-code0xc0000005
Windows-sprechen für eine schlechte Zeiger dereferenzieren.)this
zu einigen anderen Stück code, das hat einedelete
...Wahrscheinlich ist es nicht die db=newDb Linie selbst, die den Absturz verursacht, sondern ein anderer code ausgeführt wird, später nicht ausgeführt werden, wenn Sie nicht legen Sie den db-Wert. Haben Sie einen Blick auf die anderen code in Ihre wndChildWhatever Klasse, und sehen, was es ist zu tun mit der (db) - Wert. Vielleicht ist es etwas frech, wie es zu löschen, während andere code ist es immer noch mit?
Mit der Linie db=newDb Sie haben zwei Zeiger auf dasselbe Objekt. Was tun Sie in der Destruktoren? Wenn du "db löschen" und "löschen " newDb" löschen Sie das gleiche Objekt zweimal die möglicherweise zu einem Absturz führen oder nicht.
Versuchen, löschen Sie den build-Verzeichnis und erstellen Sie ihn neu. Es funktionierte für mich, aber ich muss es tun, wenn ich eine neue Funktion hinzufügen oder ein Mitglied für jede Klasse. Idk warum.