查看: 913|回复: 4

新人读了教程请教个问题

[复制链接]

该用户从未签到

发表于 2014-10-13 14:25:43 | 显示全部楼层 |阅读模式
读OSG程序设计教程 里面第三章的一段代码为什么运行的时候直接内存错误呢
  1. #include <osgDB/ReadFile>
  2. #include <osgViewer/Viewer>
  3. #include <osg/Node>
  4. void main()
  5. {
  6.         osgViewer::Viewer viewer;
  7.         osg::Group *root=new osg::Group();
  8.         osg::Node *glider=osgDB::readNodeFile("glider.osg");
  9.         glider->asGroup()->addChild(osgDB::readNodeFile("lz.osg"));
  10.         root->addChild(glider);
  11.         root->addChild(osgDB::readNodeFile("osgcool.osgt"));
  12.         viewer.setSceneData(root);
  13.         viewer.realize();
  14.         viewer.run();
  15. }
复制代码

代码在这,用的VS2010+OSG3.2

并且,DEBUG模式能运行的程序在release模式下 也是报内存错误,为什么呢

该用户从未签到

发表于 2014-10-13 22:15:08 | 显示全部楼层
错误方式在:
      glider->asGroup()->addChild(osgDB::readNodeFile("lz.osg"));
      因为glider->asGroup() 不成功, 结果为NULL,对NULL操作当然有问题。
     glider只是一个osg::Geode节点,不是一个osg::Group, 不能添加其它节点,
我们可以通过osg::NodeVisitor遍历glider节点信息(参考《OpenSceneGraph 3.0 Beginner's Guide》 Visiting scene graph structures),输出:

osg::Geode geode
  osg::Geometry drawable
  osg::Geometry drawable
  osg::Geometry drawable
  osg::Geometry drawable
  osg::Geometry drawable
  osg::Geometry drawable

该用户从未签到

发表于 2014-10-13 22:17:32 | 显示全部楼层
至于Debug与Release运行结果不同的原因,我不懂,但无法两个都正确执行,代码当然是有问题的。

该用户从未签到

 楼主| 发表于 2014-10-14 11:14:03 | 显示全部楼层
tingsky 发表于 2014-10-13 22:17
至于Debug与Release运行结果不同的原因,我不懂,但无法两个都正确执行,代码当然是有问题的。

多谢回复
debug和release的情况是debug生成的exe文件可以执行,但是用release生成的exe执行后就会报内存0x00000000处错误 不知道是为什么

该用户从未签到

 楼主| 发表于 2014-11-5 19:53:15 | 显示全部楼层
搞清楚了 release版本需要的动态链接库名字后面没有d
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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