编译顺序可能导致全局变量产生段错误

现象:一个Qt工程,在整理了工程描述文件(.pro文件)内的文件清单后,运行时产生段错误。调试发现段错误产生于对一个全局对象的调用上,该段代码先前已通过调试。

分析:比对代码库,发现工程描述文件(.pro文件)内的文件清单在改动前,发生段错误的代码行所在的文件定义在全局对象所在的文件之后,而被在调整代码顺序后这个顺序发生了改变。并且断点分析表明发生段错误的代码执行时,依赖的全局变量尚未被初始化。

处理:工程描述文件(.pro文件)内的文件清单,重新编译后可以运行。

笔记:全局变量的初始化顺序通常是无法保证的,为此应尽可能减少全局变量使用。临时的处理方法包括使用函数返回对全局变量、将全局变量定义在头文件中并使用static关键字修饰等。

it
除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License