Qt程序中使用全局变量,此变量为一个自定义类声明,称呼为类A,类A构造函数中创建了一个继承了QObject的子类,称呼为类B。类B使用了信号和槽,此时运行程序出现崩溃。
经排查VS工程文件中先编译类A的文件,后编译类B的moc文件,程序运行时先初始化类A的全局变量,此时类B头文件moc的元对象静态成员未初始化,类似于moc_xxx.cpp文件中的static const qt_meta_stringdata_xxx_t qt_meta_stringdata_xxx = {...}还未初始化,此时使用信号和槽会导致空指针访问数据引发的崩溃问题,此情况下需要将信号和槽的连接处理放在Init等初始化函数中,此时程序已经运行起来,所有的全局变量、静态变量已经初始化成功,就不会出现上述问题
参考:https://blog.csdn.net/anonymalias/article/details/38473985