2014-10-02 30 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