我今天也遇到楼主类似的问题:原因是在一个Singleton类(使用auto_ptr实现的),因为在界面关闭后需要处理一些设置数据,所以这个类的生命周期比主窗口的生命周期还要长,所以使用了单例模式的非普通指针实现,当然也可以使用栈对象,但是栈对象的实现在以前的一个工程里遇到过程序退出时报段错误,被弄得很惨,后来都一直用auto_ptr实现单例了。
在这个单例类的析构函数中使用了一个qDebug() 输出内容,逻辑上没有任何问题,而且这个类放到其他工程里完全正常工作,但是就是放在这个工程里在程序退出时会报段错误,说qApp已经被析构掉了,但是系统还发送了个消息给QDebug,所以就报错了。当把那个析构函数里的qDebug() 输出语句删除后,一切就正常了。(难道这不是见鬼?)
这种错误在Qt里已经遇到过不少次了,反正非偶然情况是找不出这种错误的,很头痛,也许这就是Qt的Bug,隐藏得很深。
今天还被整得很惨的是,好好的工程,突然给我报symbol(s) not found for architecture x86_64,重启QtCreator,重启系统都还是报同样的错误,怎么找都找不到问题在哪,都快准备重建工程,一个一个文件的复制过去了。
最后试着把工程拖到另外的目录,重新编译,日T,竟然编译成功了,再放回原来的目录,再编译运行,一切又都正常了。
Qt的很多Bug,隐藏得非常非常深,而且你从逻辑上都找不到是怎么回事,最怕的就是这种问题,都是莫名其妙的。