QT应用程序在Ubuntu12.04上崩溃 我在Windows和uBuntu1204上用C++开发了Qt应用程序。 我可以在Windows上运行我的应用程序,但我的应用程序在Ubuntu上崩溃。 因此,我在gdb上运行我的应用程序,并收到以下消息 Program received signal SIGSEGV, Segmentation fault. _GLOBAL__sub_I_SmartEditImp.cpp () at /home/linden/Qt5.3.1/5.3/gcc/include/QtCore/qrefcount.h:62 62 if (count != -1) // !isStatic

QT应用程序在Ubuntu12.04上崩溃 我在Windows和uBuntu1204上用C++开发了Qt应用程序。 我可以在Windows上运行我的应用程序,但我的应用程序在Ubuntu上崩溃。 因此,我在gdb上运行我的应用程序,并收到以下消息 Program received signal SIGSEGV, Segmentation fault. _GLOBAL__sub_I_SmartEditImp.cpp () at /home/linden/Qt5.3.1/5.3/gcc/include/QtCore/qrefcount.h:62 62 if (count != -1) // !isStatic,c++,qt,gdb,C++,Qt,Gdb,我无法指定发生错误的位置。 你有办法解决这个问题吗? 我使用QT5.3.1、QtCreator3.1.2和gcc4.6.1。 谢谢。助手私有类QtPrivate::RefCount用于在所有Qt容器(包括QString和QByteArray)中实现写时复制习惯用法 使用无效的Qt容器实例是QtPrivate::RefCount:ref方法崩溃的唯一原因。例如,在QString复制构造函数或QString assignment运算符的正文的第一行中调用该方法: QString::QString(c

我无法指定发生错误的位置。 你有办法解决这个问题吗? 我使用QT5.3.1、QtCreator3.1.2和gcc4.6.1。 谢谢。

助手私有类QtPrivate::RefCount用于在所有Qt容器(包括QString和QByteArray)中实现写时复制习惯用法

使用无效的Qt容器实例是QtPrivate::RefCount:ref方法崩溃的唯一原因。例如,在QString复制构造函数或QString assignment运算符的正文的第一行中调用该方法:

QString::QString(const QString &other);
QString &QString::operator=(const QString &other);
因此,这种崩溃有三种可能的情况:

最有可能的情况是通过指针或引用访问已被破坏的对象,其中包含一些Qt容器; 取消引用从未初始化的指向Qt容器的指针及其用法; 被隐藏的bug损坏的应用程序堆是最不可能出现的情况,因为在这种情况下,应用程序可能会在随机位置崩溃。
1您可能希望尝试在gdb中使用backtrace命令bt来获取崩溃的回溯2您可能应该发布一些与backtracen1le14id9n中引用的源代码行相关的代码问题的根本原因是什么?如果我的假设是正确的,你可以对答案投赞成票,并将其标记为对你的问题的“接受”答案。因此,它对将来可能遇到相同问题的人很有用。这个问题的原因是常量声明。我可以通过将常量改为文字来解决这个问题。