查看: 1331|回复: 4

急救!

[复制链接]

该用户从未签到

发表于 2013-1-19 12:45:38 | 显示全部楼层 |阅读模式
我将 osgViewer::CompositeViewer封装为指针pViewer,存储在一个类中实现各种对外操作。可现在遇到退出出错的问题。退出时我将pViewer指针删除了,避免内存泄漏,可指针删除后发现CompositeViewer::run()函数仍在执行,而且跟踪发现该指针已经变成野指针了!请问,是多线程的缘故吗?我在删除指针前已经调用了pViewer->setDone(true)和pViewer->stopThreading(),为什么线程还在执行呢?pViewer启动使用的是  pViewer->run()函数,改用pViewer->frame()也不行,退出总报错!郁闷!

该用户从未签到

发表于 2013-1-19 15:53:41 | 显示全部楼层
pViewer是你继承osgViewer::CompositeViewer写的吗?  你用智能指针来管理你的 pViewer 了嘛?  你删除指针时,是用的delete还是让指针等于NULL ,如果没用delete而直接等于NULL自然会成为野指针了

该用户从未签到

 楼主| 发表于 2013-1-19 18:44:09 | 显示全部楼层
没用职能指针,用的是 delete pViewer,而且没有重载CompositeViewer,删除完指针之后,也使用了pViewer=NULL,还是死机!郁闷!

该用户从未签到

发表于 2013-1-21 07:57:27 | 显示全部楼层
查堆栈  找问题 尽量使用ref_ptr

该用户从未签到

发表于 2013-1-22 13:16:42 | 显示全部楼层
您的删除和run()的调用不在同一个线程里?那么您的同步显然没有做好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表