const QList <int> warnings = QList <int>()&lt;&lt; 0;使用gcc 4.7.2 </int> </int>进行段错误

时间:2012-11-07 13:25:18

标签: c++ qt gcc4.7

因此,主题行中提到的代码会导致Qt 4.8.3&amp;的分段错误。 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用于保存群集枚举。

1 个答案:

答案 0 :(得分:6)

我的通灵调试能力告诉我,有问题的行存在于全局/文件范围,而不是类/函数范围。因此,在静态初始化期间,可以在任何时候调用您的行。使用旧的gcc,恰好在调用行之前已经初始化了。使用新的gcc,在QT准备创建对象并插入到它们之前,它会重新排序(完全合法)静态初始化以调用您的函数。

解决方案是在QList开始之后推迟创建main。使用指针或静态本地对象是两种常见的实现。