QT应用程序在Ubuntu12.04上崩溃

时间:2015-09-06 03:23:25

标签: c++ qt gdb

我已经在Windows和Windows上开发了使用C ++的QT应用程序。 Ubuntu12.04。 我可以在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

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

1 个答案:

答案 0 :(得分:0)

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

使用无效的Qt容器实例是导致QtPrivate::RefCount:ref()方法崩溃的唯一原因。例如,在QString复制构造函数或QString分配运算符的主体的第一行中调用该方法:

QString::QString(const QString &other);
QString &QString::operator=(const QString &other);

因此,此类崩溃有三种可能的情况:

  • 最可能的情况是通过指针或引用访问已经破坏的对象,里面有一些Qt容器;
  • 取消引用从未初始化的指向Qt容器的指针及其用法;
  • 隐藏错误导致应用程序堆损坏是最不期望的情况,因为在这种情况下,应用程序可能会在随机位置崩溃。