查看: 1588|回复: 6

程序执行viewer.run()的时候中断

[复制链接]

该用户从未签到

发表于 2010-4-13 10:00:44 | 显示全部楼层 |阅读模式
程序在viewer.run()设置断点,单步执行后中断,弹出提示为:“OsgQtProject.exe 中的 0x1023c9ce (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突”,并且指向strncmp.c文件中的
  1. /* residual loop */
  2. for (; n < count; ++n)
  3. {
  4. if (*first == 0 || *first != *last)
  5. {
  6. return (*(unsigned char *)first - *(unsigned char *)last);
  7. }
  8. ++first;
  9. ++last;
  10. }
复制代码

if (*first == 0 || *first != *last)语句。
请问是什么原因啊?

该用户从未签到

发表于 2010-4-13 12:18:12 | 显示全部楼层
您没有给出真正存在问题的地方,请重新跟踪您的堆栈并给出与OSG库相关的错误信息以及您的程序中相关的代码

该用户从未签到

 楼主| 发表于 2010-4-13 16:45:19 | 显示全部楼层
问题已经找到了,是我自己的问题,谢谢大家了!

该用户从未签到

发表于 2010-4-13 17:02:05 | 显示全部楼层
什么原因啊?能共享一下吗?我也出现类似的问题了

该用户从未签到

 楼主| 发表于 2010-4-14 09:59:21 | 显示全部楼层
什么原因啊?能共享一下吗?我也出现类似的问题了
jackaduma 发表于 2010-4-13 17:02

我是因为使用的viewer.run(),把这个换成frame()循环就好了。这个可能不是根本原因,但是总之解决了~希望对您能有帮助

该用户从未签到

发表于 2010-12-11 23:11:44 | 显示全部楼层
绘制线程渲染还是使用frame;
对于上面出现的问题,极大可能原因是主进程与渲染线程同时进行时导致的:也就是说,当在主线程中创建Viewer时,渲染线程也可能启动了,而渲染线程中渲染时会访问Viewer的指针,而若此时主进程创建Viewer比渲染慢点则会出现Viewer非法,至于为什么会出现上面关于字符串的错误,个人猜想:由于渲染中可能会有多个Camera,在查找对应的Viewer时(可能是根据name),出现字符串非法操作的缘故,纯属个人猜想,没有验证。

该用户从未签到

发表于 2010-12-13 09:11:24 | 显示全部楼层
极大可能原因是主进程与渲染线程同时进行时导致的:也就是说,当在主线程中创建Viewer时,渲染线程也可能启动了
这似乎没有太多道理,一般此类错误都是由于开发者在无法预知的地方更改了场景的数据,例如在单独的界面线程中;此时我们无法知道osg正在做什么。场景数据的更改只能放置在回调中进行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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