• 6437阅读
  • 4回复

[提问]用插件在Vs2005下写的程序,运行后关闭程序会报错是为啥? [复制链接]

上一主题 下一主题
离线hjh2008
 

只看楼主 倒序阅读 楼主  发表于: 2011-06-30
插件在Vs2005下写的软件,运行后关闭程序会报错是为啥?  谢谢!
离线hjh2008

只看该作者 1楼 发表于: 2011-07-01
  debug版的程序关闭时提示“test.exe中触发一个断点,其原因可能是堆被损坏,这也说明test.exe中或它所加载的任何DLL中有bug”

release版的程序关闭时弹出Qt creator Debugger对话框提示:test.exe (process id 4040) crashed. would you like to debug it?


大家有遇到类似情况吗?  难到是Qt的bug吗?
离线williamshy
只看该作者 2楼 发表于: 2011-11-10
把你写程序的步骤也写出来啊,大家照着做一下看有没有问题不就知道了。
shy
离线jorneyr

只看该作者 3楼 发表于: 2011-11-10
我今天也遇到楼主类似的问题:原因是在一个Singleton类(使用auto_ptr实现的),因为在界面关闭后需要处理一些设置数据,所以这个类的生命周期比主窗口的生命周期还要长,所以使用了单例模式的非普通指针实现,当然也可以使用栈对象,但是栈对象的实现在以前的一个工程里遇到过程序退出时报段错误,被弄得很惨,后来都一直用auto_ptr实现单例了。

在这个单例类的析构函数中使用了一个qDebug() 输出内容,逻辑上没有任何问题,而且这个类放到其他工程里完全正常工作,但是就是放在这个工程里在程序退出时会报段错误,说qApp已经被析构掉了,但是系统还发送了个消息给QDebug,所以就报错了。当把那个析构函数里的qDebug() 输出语句删除后,一切就正常了。(难道这不是见鬼?)

这种错误在Qt里已经遇到过不少次了,反正非偶然情况是找不出这种错误的,很头痛,也许这就是Qt的Bug,隐藏得很深。

今天还被整得很惨的是,好好的工程,突然给我报symbol(s) not found for architecture x86_64,重启QtCreator,重启系统都还是报同样的错误,怎么找都找不到问题在哪,都快准备重建工程,一个一个文件的复制过去了。
最后试着把工程拖到另外的目录,重新编译,日T,竟然编译成功了,再放回原来的目录,再编译运行,一切又都正常了。

Qt的很多Bug,隐藏得非常非常深,而且你从逻辑上都找不到是怎么回事,最怕的就是这种问题,都是莫名其妙的。
离线jdwx

只看该作者 4楼 发表于: 2011-11-10
我这里也有奇怪问题,明明正常的代码,就改了一点,编译正常,启动没问题,不一定什么时候就出段错误,一般关闭的时候出问题概率高。
解决方法:除了源文件,统统删除(手工删除,重新构建和清理都没用),重新编译,结果正常了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个