[英]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.