2013-03-06 3 views
1

У меня есть приложение Qt, которое работает в режиме отладки без каких-либо проблем. С двух дней я пытаюсь заставить его работать в режиме Release. После некоторой модификации свойства проекта мне удалось скомпилировать без ошибок. Но, к сожалению, приложение падает до того, как достигнет основного метода. Это моя среда:Приложение Qt вызывает исключение нарушения доступа во время запуска

  • MS VS 2010
  • Qt 4.8.4
  • QWT 6.0.0

Я не знаю, если это уместно, но я также установлен Qt плагин для VS и используется Qt Designer для создания моего графического интерфейса.

Как я уже говорил, в режиме отладки нет проблем. Запуск версии релиза из Visual Studio приводит к следующей ошибке: Необработанное исключение в 0x77c415de в Application.exe: 0xC0000005: местоположение чтения нарушения доступа 0x0000000c.

Последняя функция, которую я могу отлаживать, - это метод «WinMain», который вызывается внутри метода «__declspec (noinline) int __tmainCRTStartup», который находится в crtexe.c (честно говоря, я понятия не имею, что это такое). Счет вызовов выглядит следующим образом:

ntdll.dll!77c415de()  
[Frames below may be incorrect and/or missing, no symbols loaded for 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() Line 547 + 0x1c bytes C 
kernel32.dll!754633aa()  
ntdll.dll!77c59ef2()  
ntdll.dll!77c59ec5()  

В тот момент, когда я полностью потерял эту проблему. Не знаю, что попробовать дальше ...

Я попытался уменьшить программу и прокомментировал полную основную функцию. Но результат был тем же самым поведением. Как я уже сказал, ошибка возникает еще до вызова основной функции. Я также отключил всю оптимизацию и перекомпилировал ... ничего не изменил.

Что меня озадачивает, так это то, что он «работает», когда я вызываю «Application.exe» из командной строки (нормально он также сбой, но намного позже во время выполнения). Странно, не так ли? В чем разница между запуском из командной строки и запуском приложения Visual Studio?

+1

Попробуйте использовать http://www.dependencywalker.com/ для анализа зависимостей исполняемого файла. Может быть причиной является смешение времени выполнения. Давайте проверим. – AnatolyS

+0

Также проверьте свою PATH, может быть, есть пути, относящиеся к времени выполнения qt из других версий. – AnatolyS

+0

Спасибо Анатолию за вашу помощь. Я удалил все пути qt из системной переменной PATH. Но никаких изменений. Я также установил зависимого пользователя, но не знаю, как запустить «приложение, запускаемое VS» там. Поэтому я просто открыл Application.exe. В нем говорится, что отсутствуют две библиотеки DLL: GPSVC.dll, IESHIMS.DLL. Не знаю, насколько это актуально. Я буду искать эти библиотеки завтра. Придется остановиться сейчас ... –

ответ

1

Проблема не в QT, а в исходном коде. «0xC0000005: Доступ к точке обнаружения нарушения доступа 0x0000000c» означает, что вы пытаетесь получить доступ к неправильной ячейке памяти.

Проверьте свои массивы, указатели ans.

0

AnatolyS и npiau благодарит вас за советы. Тем временем я продолжал копаться в своем коде. Более или менее я начал с самого начала и, наконец, получил место ошибки. Я полагаю, что npiau прав, он не имеет ничего общего с Qt.

Это по-прежнему (для меня) странная проблема. Я разместил его в новом потоке (потому что он имеет мало общего с этим потоком): C++ Creation of a Singleton object in initializer list causes an Access Violation (only Release Mode)