2

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

  • 女士 VS 2010
  • Qt 4.8.4
  • 质量重量 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()    

此刻我完全迷失了这个问题。不知道要进一步尝试什么...

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

让我完全困惑的是,当我从命令提示符调用“Application.exe”时它“工作”(好吧,它也崩溃了,但在执行过程中要晚得多)。很奇怪,不是吗?从命令提示符开始和从 Visual Studio 应用程序开始有什么区别?

4

2 回答 2

0

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

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

于 2013-03-08T16:55:29.437 回答
0

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

检查您的数组和指针。

于 2013-03-07T13:17:41.673 回答