簡體   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