Qt Application在启动期间抛出Access违规异常

时间:2013-03-06 17:17:32

标签: qt release startup access-violation

我有一个Qt应用程序在调试模式下工作没有任何问题。两天以来,我试图让它在发布模式下工作。在一些Project属性修改之后,我设法编译没有错误。但不幸的是,应用程序在达到主要方法之前崩溃了。 那是我的环境:

  • MS VS 2010
  • Qt 4.8.4
  • Qwt 6.0.0

我不知道这是否相关,但我还为VS安装了Qt插件,并使用Qt Designer创建我的GUI。

正如我在调试模式中所说,没有问题。从Visual Studio启动发布版本会产生以下错误: Application.exe中0x77c415de处的未处理异常:0xC0000005:访问冲突读取位置0x0000000c。

我可以“调试”的最后一个函数是在方法“__declspec(noinline)int __tmainCRTStartup”中调用的“WinMain”方法,该方法位于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()    

此刻我完全迷失了这个问题。不知道该怎么做...

我试图减少程序并注释掉完整的主要功能。但结果是相同的行为。正如我所说,甚至在调用main函数之前就会发生错误。我也关闭了所有优化并重新编译......没有改变任何东西。

让我感到困惑的是,当我从命令提示符调用“Application.exe”时它“正常工作”(好吧它也会在执行期间崩溃但很晚)。很奇怪,不是吗?从命令提示符启动和从Visual Studio应用程序启动有什么区别?

2 个答案:

答案 0 :(得分:1)

问题不在QT中,而是在源代码中。 “0xC0000005:访问冲突读取位置0x0000000c”表示您尝试访问错误的内存位置。

查看你的数组和指针。

答案 1 :(得分:0)

AnatolyS和npiau感谢您的提示。与此同时,我继续挖掘我的代码。或多或少,我从一开始就开始,最后得到错误发生的地方。我认为npiau是对的,它与Qt无关。

它仍然(对我来说)是一个奇怪的问题。我将它发布在一个新的帖子中(因为它与这个帖子没什么关系):C++ Creation of a Singleton object in initializer list causes an Access Violation (only Release Mode)