Seite 1 von 1

Access Violation durch QFileDialog

Verfasst: 23. Mai 2012 09:08
von krisztian
Hallo,

ich benutze für ein Projekt "QFileDialog::getOpenFileNames();" um an eine Liste mit Dateinamen zu kommen. Nachdem ich schon eine ganze Weile (ca. 2 Monate) mit und an diesem Programm gearbeitet habe bekomme ich auf einmal nach kurzer Laufzeit Abstürze:

Code: Alles auswählen

Zugriffsverletzung beim Lesen an Position 0xfeeefeee
Meine Test haben ergeben, dass die Abstürze durch QFileDialog verursacht wurden. Deshalb habe ich ein kleines Beispiel erstellt in dem eigentlich nur diese Funktion verwendet wird. Dort wurden dann auch die Parameter weg gelassen, die ich getOpenFileName übergeben kann. Das Projekt befindet sich im Anhang (VS 2010 Solution).

Auch hier kommt es nach einer scheinbar zufälligen Zeitspanne zum Absturz mit der Meldung:

Code: Alles auswählen

Eine Ausnahme (erste Chance) bei 0x760bb9bc (KernelBase.dll) in OpenFileDialogTest.exe: 0x80010108: Das aufgerufene Objekt wurde von den Clients getrennt.
Eine Ausnahme (erste Chance) bei 0x760bb9bc (KernelBase.dll) in OpenFileDialogTest.exe: 0x80010108: Das aufgerufene Objekt wurde von den Clients getrennt.
Eine Ausnahme (erste Chance) bei 0x760bb9bc (KernelBase.dll) in OpenFileDialogTest.exe: 0x80010108: Das aufgerufene Objekt wurde von den Clients getrennt.
Eine Ausnahme (erste Chance) bei 0x7560c99e in OpenFileDialogTest.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xfeeefeee.
[b]Unbehandelte Ausnahme bei 0x7560c99e in OpenFileDialogTest.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xfeeefeee.[/b]
Ob die vorherigen Meldungen auch schon eher ungut sind kann ich leider nicht beurteilen.

Bisher versucht habe ich:
- umstellen von Debug auf Release (hat für eine Tag etwas gebracht, danach war das Problem wieder da)
- Update auf neuste Qt Version(jetzt 4.81 vorher 4.80)
- Testweises anlegen eines QFileDialog-Objekts. Mittels diesem dann getOpenFileName aufgerufen und anschließend das Objekt mit ~pMyFileDialog wieder gelöscht. Hatte auch keinen Erfolg.
- Projekt im Qt-Creator erstellt. Hier ist es dann nicht zu Abstürzen gekommen. Seltsamerweise, war es sogar so, dass auch das VS Programm nicht abstürzte wenn nebenher das mit dem Qt-Creator erstellte Programm lief. Aber ich verbuche das mal unter sehr großem Zufall.
- Projekt auf anderem Rechner schien, zumindest nach kurzer Testphase, stabil zu laufen.

Die Anzeige der Aufrufliste ergibt Folgendes:

Code: Alles auswählen

>	ole32.dll!7560c99e() 	
 	[Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für ole32.dll]	
 	ole32.dll!7564eb7f() 	
 	ole32.dll!7564eb4d() 	
 	ole32.dll!7564923c() 	
 	ole32.dll!7564b4d0() 	
 	ole32.dll!7564eb7f() 	
 	ole32.dll!7564eb4d() 	
 	ole32.dll!75648d94() 	
 	ole32.dll!7564928b() 	
 	ole32.dll!75648f82() 	
 	ole32.dll!7564eb7f() 	
 	ole32.dll!75648ec3() 	
 	ole32.dll!7563bac3() 	
 	networkitemfactory.dll!FDBackgroundThreadHandler()  + 0x21 Bytes	
 	shlwapi.dll!WrapperThreadProc()  + 0xd3 Bytes	
 	kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 Bytes	
 	ntdll.dll!___RtlUserThreadStart@8()  + 0x27 Bytes	
 	ntdll.dll!__RtlUserThreadStart@8()  + 0x1b Bytes	
Da ich nun recht am Ende meines Lateins bin (bin weder in C++ noch in Qt Profi nur hatte ich bisher mit QFileDialog nie Probleme) würde ich mich über jede Hilfe freuen.

Gruß,
krisztian

Re: Access Violation durch QFileDialog

Verfasst: 23. Mai 2012 14:04
von Christian81
Kann es sein dass verschiedene Qt-Dlls von verschiedenen Versionen bei dir im PATH sind? Der Backtrace sagt ja auch nichts von Qt aus. Mal mit den Debug-Qt-Dlls gebaut und dann mit dem Debugger mal geschaut?

/edit: Manchmal liegt es auch an einem Programm welches sich in das Explorer-Contextmenu (z.B. TortoiseSVN/CVS/Git) hängt - hast Du evtl. so etwas installiert?

Re: Access Violation durch QFileDialog

Verfasst: 23. Mai 2012 16:00
von krisztian
Hallo,

vielen Dank für Ideen.

Zum ersten Vorschlag:
Ich weiß nicht ganz was du meinst mit verschiedene Versionen im Path. In den Projekteinstellungen wird sich ja immer auf QTDIR bezogen. Das sollte also einfach abhängig von der mir eingestellten Version sein. Da ich das Problem auch schon hatte als nur Qt 4.80 installiert war bin ich mir auch nicht sicher ob die Problemtik aus der Ecke kommt.

Das mit den Debug-Qt-Dll´s bauen musst du mir bitte erklären. Dann versuche ich das gerne.

Zum zweiten Teil:
Hier ist WinCVS installiert. Ich versuche mal es zu deinstallieren.

Gruß,
krisztian

Re: Access Violation durch QFileDialog

Verfasst: 24. Mai 2012 11:54
von krisztian
Nachtrag: WinCVS deinstallieren hat keine Erfolg gebracht.

Das Ganze verhält sich leider auch so, dass mein Programm teilweise Stunden läuft ohne Zicken zu machen und auf der anderen Seite aber auch manchmal nach 2 Minuten abstürzt. :(

Re: Access Violation durch QFileDialog

Verfasst: 30. Mai 2012 11:57
von Troll.Soft
Moin,
also mein Standardvorgehen sieht so aus. Pfad überprüfen, wie von Chris beschrieben. Alles was vom Compiler und von Qt automatisch erstellt wurde löschen. Nur die Qt-Pro Datei bleibt bestehen. Das Projekt komplett neu erstellen im Debugmodus. In Extremfällen das System von Compiler und Qt komplett säubern und Compiler + Qt neu installieren im Debugmodus. Dabei sind schon diverse Fehler verschwunden ohne das ich je herausbekam woran es nun wirklich lag :)
tschüß
Troll.Soft

Re: Access Violation durch QFileDialog

Verfasst: 9. Juli 2012 16:43
von krisztian
Hey,

danke auch für den letzten Tipp.

Kurz noch zur "Lösung".

Nachdem Qt + VS 2010 Neuinstallation nichts gebracht hat musste Win7 daran glauben. Nun läuft alles fehlerfrei (bisher).

Ob ich allerdings bei der Deinstallation von VS2010 alles erwischt (und damit jede damit zusammenhängende Fehlerursache beseitigt) habe kann ich nicht sagen. Nach dem deinstallieren war auf jeden Falls noch relativ viel vom VS auf der Platte (ein ähnliches Bild bei Qt).

Dennoch danke an Alle!

Gruß,
krisztian