2014-07-01 44 views
3

我一直在一個應用程序每天工作一段時間,就像現在幾個星期,並且已經在開發中得到了很大的發展。Qt應用程序崩潰如果沒有QDebug消息首先運行

我有一個不必要的類,它只是轉發對象創建。它基本上是一個創建「Widget」類的「Window」類。因此,我不是通過不必要的「Window」類來創建「Widget」類,而是直接在主「App」類中創建「Widget」類。但是現在,如果我運行它,應用程序會崩潰,就好像它在某個遞歸循環中一樣,並且不會顯示窗口。

我在每行上添加了一些QDebug消息,以查看它在崩潰之前到達的位置,然後它運行得很好。這到底是怎麼回事?它運行得很好這樣的:

void App::initialize() 
{ 
    qDebug() << "Initializing..."; 

    qDebug() << "Creating the widget"; 
    widget = new Widget(); 

    qDebug() << "Showing the widget..."; 
    widget->show(); 

    qDebug() << "Initialized"; 
} 

但如果我刪除任何前兩名QDebug的消息,它被固定在其遞歸式循環。我不知道爲什麼這樣做。我已經檢查了項目文件和qmake,在調試和發佈模式下運行,並且都是一樣的。

我不是在尋找如何解決這個問題的答案。我正在尋找的是如果其他人經歷過這種情況。這對我來說沒有意義,我也沒有看到它可能會崩潰......這是否像Qt中的錯誤?

+0

您的應用程序是多線程的嗎? – TheDarkKnight

+0

不是。目前所有的單一ui線程。 –

回答

1

聽起來像你有內存管理問題 - 要麼是沒有正確初始化,要麼是踩在別人的內存上(緩衝區溢出)。 qDebug創建了一個相當重要的緩衝區 - 當它被踩踏時不會導致程序崩潰,或者對於未初始化的值可以更改它們的默認值。

我會仔細檢查你的初始化。尤其是檢查在您的構造函數中處理的事情,這些事情可能已從您之前刪除的類中的初始化程序傳遞過來。

例如

Foo::Foo(QObject *parent) : QObject(parent) 
+0

我在發佈之前已經詳細檢查了所有這一切。在每行代碼中查找以什麼順序創建的內容。它的一切都正確。所有內容在訪問之前都已初始化 –

相關問題