因此,主题行中提到的代码会导致Qt 4.8.3&的分段错误。 gcc 4.7.2
这是在.cpp文件的任何类/结构之外,并与gcc 4.4一起使用
const QList<int> warnings = QList<int>() << 0 << 3 << 7;
Traces给出了这两个提示:
__do_global_ctors()
__static_initialization_and_destruction_0
因此,当将“后面的列表”插入其中时,“警告”似乎尚未可用。
如果我将其更改为此内容,则使用4.7.2:
global scope: QList< int> warnings;
这是一些功能:
warnings = QList<int>() << 0 << 3;
我想知道为什么会这样?
修改
我想我最初从我的问题中删除了一些东西,但警告应该是文件范围(.cpp-file)中的const用于保存群集枚举。
答案 0 :(得分:6)
我的通灵调试能力告诉我,有问题的行存在于全局/文件范围,而不是类/函数范围。因此,在静态初始化期间,可以在任何时候调用您的行。使用旧的gcc,恰好在调用行之前已经初始化了。使用新的gcc,在QT准备创建对象并插入到它们之前,它会重新排序(完全合法)静态初始化以调用您的函数。
解决方案是在QList
开始之后推迟创建main
。使用指针或静态本地对象是两种常见的实现。