2014-10-02 50 views
1

我有一個Qt5/C++應用程序似乎工作正常,但在調試模式(GDB)下運行時,QT Creator控制檯上彈出此錯誤消息標準錯誤) - 偶爾!:Qt5/C++在調試期間生成'損壞的共享庫列表'錯誤

Corrupted shared library list: 0x7fffe8008e90 != 0x751e50 

我找不到原因的任何引用,我也弄不清是什麼觸發它(其他的東西與使用QLinkedList做)我試圖切換。到QVector,但有時彈出相同的錯誤。

這是什麼,如何解決? Valgrind說沒有記憶腐敗......所以這是一個虛假的報告問題?或者我做錯了什麼。


我已經將上述錯誤追溯到下面的最後一行(第4行)。

Settings *programSettings = Settings::instance(); 
QString driver=programSettings->database_driver(); 
driver="QMYSQL"; // Override for testing 
m_db = QSqlDatabase::addDatabase(driver); 

這是沒有意義的,我...有人可以解釋爲什麼QSqlDatabase :: addDatabase行導致腐敗?同樣,爲什麼錯誤只會在調試時出現......但是在沒有gdb的情況下運行時不會出現?

+0

你在linux上嗎? – 2014-10-02 15:19:30

+0

我不認爲Valgrind可以保證捕獲所有類別的錯誤。 (例如,開箱即用,它不會捕獲堆棧上的數組溢出。)我不知道它是否可能會丟失導致此消息的錯誤。 – 2014-10-02 15:28:35

+0

是的 - 在Linux 64位Fedora 20上運行。我有Qt Creator的調試模式集(所以所有的調試選項都應該啓用) – TSG 2014-10-02 19:29:56

回答

0

根據查看次數,似乎有很多人遇到這個問題。我們將代碼縮減爲一個簡單的例子,然後重現問題。問題的根源不在於用戶代碼,而在於Qt Creator本身。我們不能再進一步了 - 只要忍受一下,直到Qt Creator修復出現爲止。

0

看起來你正在寫的內存不屬於你自己。它看起來像是取消引用具有未初始化值的指針。在啓用所有警告的情況下編譯您的應用程序,並確保您瞭解所有警告。之後,你可能需要開始代碼審計,在你最小化代碼之後。

+0

當用調試器執行代碼時,我無法重現錯誤。有沒有辦法斷言(或類似的)有效的指針,並讓我的代碼停止如果無效? – TSG 2014-10-02 19:51:03

+0

不,沒有辦法斷言這樣的事情,不幸的是。您可能無法在單步執行時重新生成,因爲代碼(如事件循環)每秒運行多次...... – 2014-10-02 20:31:57

+0

經過大量調試並創建示例代碼之後,這似乎是Qt Creator問題。 – TSG 2015-03-14 00:16:10