查看: 951|回复: 2

关于创建节点类型的三维数组

[复制链接]

该用户从未签到

发表于 2013-3-24 08:53:52 | 显示全部楼层 |阅读模式
我想动态申请一个PositionAttitudeTransform类型的三维数组

在第三层申请空间的时候 提示错误 代码及错误提示如下
  1. allSeats = new osg::PositionAttitudeTransform**[levelNumber];        //申请第一维

  2.         for(unsigned int le = 0; le < levelNumber; le++){
  3.                 string s;
  4.                 stringstream stream;
  5.                 stream<<le+1;
  6.                 stream>>s;
  7.                 seatFile.open("data/seatPosition" + s + ".txt");
  8.                 seatFile>>rowNumber;        //读取排数
  9.                 allSeats[le] = new osg::PositionAttitudeTransform*[rowNumber];        //申请第二维

  10.                 for(unsigned int k = 0; k < rowNumber; k++)
  11.                 {
  12.                         seatFile>>rowID;        //读取排号       
  13.                         seatFile>>number;        //读取本排座椅个数       
  14.                         seatCoor->clear();
  15.                         allSeats[le][k] = new osg::PositionAttitudeTransform[number];        //申请第三维
  16.                 }
  17.         }
复制代码
申请第三维数组的时候 提示
未命名.jpg
请问是什么问题?
三维数组类型如果改成int的就没问题 应该怎么改? 求指导。。

该用户从未签到

发表于 2013-3-24 09:24:45 | 显示全部楼层
这部分代码貌似不能发现啥

从错误信息来看可能是直接delete PositionAttitudeTransform类型的指针发生的(由于PositionAttitudeTransform类的析构函数是protected),猜测可能某个地方调用了delete,可以使用osg::ref_ptr试试

另外,我一直感觉C/C++中的2维,3维,n维数组是个比较怪异的东西,用不好很容易出错,推荐使用1维数组来替代(比如1维数据,stl里的vector),n维数组在内存中也是使用连续的地址空间表示的,仍然可以看做是1维数组

该用户从未签到

 楼主| 发表于 2013-3-24 09:33:28 | 显示全部楼层
anheihb03dlj 发表于 2013-3-24 09:24
这部分代码貌似不能发现啥

从错误信息来看可能是直接delete PositionAttitudeTransform类型的指针发生的 ...

每一维的值都不是固定的 所以使用一维数组的话 想要获得某个特定的元素 是非常麻烦的。。我貌似没有delete啊  我把三维数组类型改成osg::ref_ptr<osg:ositionAttitudeTransform> 了
动态申请的时候改成
allSeats = new osg::ref_ptr<osg::PositionAttitudeTransform>**[levelNumber];//第一维
allSeats[le] = new osg::ref_ptr<osg::PositionAttitudeTransform>*[rowNumber];//第二维
allSeats[le][k] = new osg::ref_ptr<osg::PositionAttitudeTransform>[number];        //第三维

就没有问题了 但是好像申请完的结果有点问题。。我再继续调试看看吧。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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