c++ - QStringList.append() 在 OS X 上崩溃

标签 c++ macos qt crash qstring

我在使用 Qt 4.8.6 的 OS X 上遇到了一个非常奇怪的崩溃。

我有一段非常简单的代码(在我们的 Windows 和 Linux 构建中工作得很好):

QStringList list;
list << "test";

我发现追加操作会在运行时崩溃,堆栈跟踪如下:

QBasicAtomicInt::ref() { asm volatile("lock\n" ... }
QString::QString(QString const&)
QString::QString(QString const&)
QList<QString>::node_copy(QList<QString>::Node*from, QList<QString>::Node*, QList<QString>::Node*)
QList<QString>::detach_helper_grow(int, int)
QList<QString>::append(QString const&)
QStringList::operator<<(QString const&)

大多数其他操作,包括 QStringList 的析构函数,都会导致类似的崩溃。

我真的不知道如何进一步调试它,任何建议将不胜感激。

谢谢!

最佳答案

这看起来像是 Qt 库由不同的编译器构建或由与应用程序其余部分不同的 C++ 库链接的典型案例。在 OS X 上,罪魁祸首往往是 libstdc++ 与 libc++,它们具有不兼容的字符串实现等。

你能用一个简单的例子重现这个吗?例如:

qstringlist.pro:

SOURCES = qstringlist.cpp

qstringlist.cpp:

#include <QStringList>
#include <iostream>
int main(int argc, char *argv[]) {
  QStringList list;
  list << "test";
  std::cout << list.join(" ").toStdString() << std::endl;
}

..然后 qmake qstringlist.pro && make && ./qstringlist.app/Contents/MacOS/qstringlist

为了解决这个问题,如果我想在其他系统上运行,我通常会自己构建 Qt,并仔细选择build设置。

关于c++ - QStringList.append() 在 OS X 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35215277/

相关文章:

c++ - 将无符号字符转换为红黑树的有符号字符

c++ - Qt:如何在函数内显示消息框?

c++ - "as-if"规则到底是什么?

c++ - 如何将当前进程分配给新创建的作业对象?

objective-c - Xcode 全屏窗口没有标题栏

python - 将 Qt 样式表与 QMenu::indicator 一起使用

c++ - 如何为字符指针数组分配内存?

c++ - DirectX 11 正面方向

cocoa - NSMenuItem-setTarget : Does it retain the target?

ios - 在类中定义的闭包中到达 "self"