Qt 应用程序在启动期间抛出访问冲突异常
Posted
技术标签:
【中文标题】Qt 应用程序在启动期间抛出访问冲突异常【英文标题】:Qt Application throws an Access violation exception during startup 【发布时间】:2013-03-06 17:17:32 【问题描述】:我有一个可以在调试模式下正常工作的 Qt 应用程序,没有任何问题。两天以来,我试图让它在发布模式下工作。经过一些项目属性修改后,我设法编译没有错误。但不幸的是,应用程序在到达 main 方法之前就崩溃了。 这就是我的环境:
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()
此刻我完全被这个问题迷失了。不知道要进一步尝试什么...
我尝试减少程序并注释掉完整的主要功能。但结果是相同的行为。正如我所说,错误甚至在调用主函数之前就发生了。我也关闭了所有优化并重新编译...没有改变任何东西。
让我完全困惑的是,当我从命令提示符调用“Application.exe”时它“工作”(好吧,它也崩溃了,但在执行过程中要晚得多)。很奇怪,不是吗?从命令提示符开始和从 Visual Studio 应用程序开始有什么区别?
【问题讨论】:
尝试使用dependencywalker.com 来分析可执行文件的依赖关系。可能原因是混合运行时。让我们检查一下。 还要检查你的PATH,可能有其他版本引用qt运行时的路径 感谢 AnatolyS 的帮助。我已经从 PATH 系统变量中删除了所有 qt 路径。但没有变化。我还安装了dependencywalker,但不知道如何在那里启动“VS 启动应用程序”。所以我只打开了Application.exe。它说缺少两个 dll:GPSVC.dll、IESHIMS.DLL。不知道这是否相关。明天我会寻找这些DLL。现在必须停下来...... 【参考方案1】:AnatolyS 和 npiau 感谢您的提示。与此同时,我继续挖掘我的代码。或多或少我从一开始就开始了,最后得到了错误发生的地方。我想 npiau 是对的,它与 Qt 无关。
这仍然是(对我来说)一个奇怪的问题。我在一个新线程中发布了它(因为它与这个线程关系不大):C++ Creation of a Singleton object in initializer list causes an Access Violation (only Release Mode)
【讨论】:
【参考方案2】:问题不在于 QT,而在于您的源代码。 “0xC0000005:访问冲突读取位置0x0000000c”表示您尝试访问错误的内存位置。
检查你的数组和指针。
【讨论】:
以上是关于Qt 应用程序在启动期间抛出访问冲突异常的主要内容,如果未能解决你的问题,请参考以下文章
C++ Battle4Zion 项目抛出未处理的异常:读取访问冲突。 **this** 是 nullptr。发生了