2 votes

L'application Qt génère une exception de violation d'accès lors du démarrage

Je possède une application Qt qui fonctionne en mode Débogage sans aucun problème. Depuis deux jours, j'essaie de la faire fonctionner en mode Release. Après quelques modifications des propriétés du projet, j'ai réussi à compiler sans erreurs. Malheureusement, l'application plante avant même d'atteindre la méthode principale. Voici mon environnement :

  • MS VS 2010
  • Qt 4.8.4
  • Qwt 6.0.0

Je ne sais pas si c'est pertinent, mais j'ai également installé le plugin Qt pour VS et utilisé Qt Designer pour créer mon interface graphique.

Comme je l'ai dit en mode Débogage, il n'y a aucun problème. Lancer la version Release depuis Visual Studio produit l'erreur suivante : Exception non gérée à l'adresse 0x77c415de dans Application.exe : 0xC0000005 : violation d'accès à l'emplacement 0x0000000c.

La dernière fonction que je peux "déboguer" est la méthode "WinMain" appelée à l'intérieur de la méthode "__declspec(noinline) int __tmainCRTStartup", qui se trouve dans crtexe.c (honnêtement, je n'ai aucune idée de ce que c'est). La pile d'appels ressemble à ceci :

ntdll.dll!77c415de()    
[Les trames ci-dessous peuvent être incorrectes et/ou manquantes, aucun symbole chargé pour ntdll.dll] 
ntdll.dll!77c415de()    
ntdll.dll!77c3014e()    
msvcr100.dll!718f0269()     
msvcr100.dll!718f233b()     
msvcr100.dll!718f233b()     
msvcr100.dll!718f233b()     
QtCore4.dll!5b2cfc49()  
QtGui4.dll!57bf54ea()   
Application.exe!__tmainCRTStartup() Ligne 547 + 0x1c octets  C
kernel32.dll!754633aa()     
ntdll.dll!77c59ef2()    
ntdll.dll!77c59ec5()    

Je suis complètement perdu face à ce problème pour le moment. Aucune idée de ce que je devrais essayer ensuite...

J'ai essayé de réduire le programme et de commenter toute la fonction main. Mais le résultat était le même comportement. Comme je l'ai dit, l'erreur se produit même avant l'appel de la fonction principale. J'ai également désactivé toutes les optimisations et recompilé... rien n'a changé.

Ce qui me trouble complètement, c'est le fait que ça "fonctionne" lorsque j'appelle "Application.exe" depuis l'invite de commandes (d'accord, ça plante aussi mais bien plus tard pendant l'exécution). Bizarre, n'est-ce pas ? Quelle est la différence entre démarrer depuis l'invite de commandes et démarrer depuis l'application Visual Studio ?

0voto

npiau Points 9

Le problème n'est pas dans QT mais dans votre code source. "0xC0000005: Violation d'accès à l'emplacement de lecture 0x0000000c" signifie que vous essayez d'accéder à une mauvaise adresse mémoire.

Vérifiez vos tableaux et vos pointeurs.

0voto

Seba Stopol Points 43

AnatolyS et npiau merci pour vos conseils. Pendant ce temps, j'ai continué à creuser dans mon code. Plus ou moins, j'ai recommencé depuis le tout début et j'ai enfin trouvé l'endroit où l'erreur se produit. Je suppose que npiau a raison, cela n'a rien à voir avec Qt.

C'est toujours (pour moi) un problème étrange. Je l'ai posté dans un nouveau fil de discussion (car cela a peu à voir avec ce fil) : C++ Création d'un objet Singleton dans une liste d'initialisation provoque une violation d'accès (uniquement en mode Release)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X