繁体   English   中英

将编译器从gcc切换到msvc后,Qt应用程序在退出时崩溃

[英]Qt application crashes on exit after switching compiler from gcc to msvc

近年来,我一直在用Qt(从4.7到5.1(现在))编写商业应用程序。 而且我一直在gcc和msvc编译器之间切换,以在偶然的间隔内测试平台和框架的兼容性。

现在,在使用Qt5.1-msvc2010构建项目并将其导入Visual Studio编辑器(2013)之后,该项目在退出时崩溃。
之后,我使用qtcreator编辑器对其进行了重建和调试,但是程序再次退出时崩溃。

当退出qtcreator编辑器使项目崩溃时,将显示此窗口。 我向您保证,我的计算机中没有“ f:\\ dd”路径!

因此,与编辑器无关,我认为此问题与msvc编译器有关。
调试后,它会切换主窗口的析构函数,但是只有“ delete ui;”。

我很清楚QObject是如何删除其子级的,并且我从未自己删除任何GUI组件。

这个问题使我感到困惑,因为gcc编译器比msvc更为严格。 任何指导或指示,我将不胜感激。

非常感谢。

生成错误的是内部Microsoft CRT(C运行时库)代码,而不是您的应用程序的代码。 因此,文件路径(“ f:\\ dd \\ vctools ...”)是指创建调试符号时Microsoft服务器上源文件的路径。 您将无法找到它。

发生的情况是CRT的调试版本包含许多额外的检查,以帮助捕获隐藏在程序中的错误。 在这种情况下,它将检测到尝试使用无效堆指针的尝试(通过调用内部的_CrtIsValidHeapPointer函数,该函数将失败)。

要解决此问题,您需要使用无效指针来查找代码在何处。 您几乎可以假定此错误是由于尝试释放/删除未在堆上分配的内存引起的。 您说调试器在delete ui;行时中断delete ui; -确保ui实际上是使用new而不是在堆栈上自动创建的,是在堆上实际创建的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM