因此,主题行中提到的代码会导致 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;
我想知道为什么会出现这种情况?
Edit:
我想我最初从我的问题中删掉了太多的东西,但是警告应该在文件范围(.cpp-文件)中是常量,用于保存一堆枚举。
我的心灵调试能力告诉我,有问题的行存在于全局/文件范围内,而不是在类/函数范围内。因此,您的线路可以在静态初始化期间的任何时候被调用。使用旧的 gcc 时,QT 已初始化before您的线路已被呼叫。使用新的 gcc,它对静态 init 进行了重新排序(完全合法),以便在 QT 准备好创建对象并将其插入其中之前首先调用您的函数。
解决方案是推迟创建该项目QList
直到之后main
开始。使用指针或静态本地对象是两种常见的实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)