我要发帖 回复

正式会员

3

主题

23

积分

0

专家分

:

私信
发表时间 : 2006-9-28 10:40:42 | 浏览 : 4052    评论 : 10
是哪个文档啊?没有看到完整的程序啊
我的程序如下:
#include <vsDOF.h>
……
class myApp : public vpApp {

public:
    vsNode*   myNode;        //定义节点实例
    vpObject* myObj;         //定义带有dof节点的模型实例
    vsDOF*    myDof;         //定义dof节点实例
……
    ~myApp()
    {
        m_myFx->unref();
        myDof->unref();
        myNode->unref();
        myObj->unref();
                    }

    int configure()
    {
        //实例化模型实例
        myObj=vpObject::find("plant");
        //实例化节点实例
        if (myObj)   myNode = myObj  ->findNamed("d_dl");
        //判断节点是否是dof节点,如果是则强制转换为dof节点,并实例化dof节点实例
        if( myNode && myNode->isOfClassType(vsDOF::getStaticClassType()) )
        myDof = (vsDOF*)myNode ;

        vsDOF::Constraint constraint(true, 0.0f, 360.0f);
        myDof ->setConstraint(vsDOF::COMPONENT_ROTATE_H, constraint);//如限制Z轴旋转

        return vsgu::SUCCESS;
       }
……
}
……
如何实现DOF自动运行?
另外在关闭exe程序后,会出现如下情况:

This application has requested the Runtime to terminate it in an unusual way.
……
vp: one of the components initialized vp, but never shut it down: watch for memory leaks on program exit.
……
请问这个问题又该如何解决?:(

最近VR访客

kthe 评论于2006-9-28 17:30:25
myObj->unref();
我觉得可能是这些语句有错,不知道你有没有写myObj->ref();这个语句, 如果没写的话,可能就是这出问题了。
smj6566 评论于2006-9-28 19:57:43
谢谢楼上!:handshake
但我试了一下,还是出现同样的问题,不知问题出项在何处。

另外,如何才能让DOF自动运行呢?:(
smstone 评论于2006-9-29 09:44:31
你把你的全部程序贴出来,我帮你看看。肯定是指针引用的问题。
susn04 评论于2009-5-18 00:09:13
myObj->unref();
我也觉得是这些调用了unref的地方出错,你必须得保证所有调用了unref函数的对象前面都调用过ref函数。
如果你是在一个if下面调用了ref(),那么有可能会因为if后面的条件不成立而跳过ref(),那么在析构函数里调用unref肯定会出错的。我以前也遇到这样的问题,错误提示和你的一样,把你的析构函数里面的代码全注释了试试看吧。
况且你一共也就释放了四个指针,无论你前面用这四个指针申请了多少空间到析构的时候也仅仅是释放了对应类型的四小块内存而已,如果你的程序有内存泄露,那么你释放的这点空间只是杯水车薪毫无意义,如果你的程序没有内存泄露那么你这段代码纯属多余而且很容易出错,所以还是删了好
如果你别的地方没用过那四个指针的话那么你出错的地方应该就是析构函数那里。

[ 本帖最后由 susn04 于 2009-5-18 12:15 AM 编辑 ]
henry0henry 评论于2009-5-19 21:08:49
原帖由 susn04 于 2009-5-18 12:09 AM 发表
myObj->unref();
我也觉得是这些调用了unref的地方出错,你必须得保证所有调用了unref函数的对象前面都调用过ref函数。
如果你是在一个if下面调用了ref(),那么有可能会因为if后面的条件不成立而跳过ref(),那么在 ...


不太同意楼上的,如果程序存在内存泄漏,而且只是由于四个指针没有释放,楼上如何说是杯水车薪。我觉得释放内存没有错,但是楼主的程序似乎确实没有用ref,这样释放内存就没有什么道理了。从最后的报错来看,好像是某个模块没有终止。都是两年多的帖子了,希望楼主出来说一下解决方法。
欢迎大家光临我的blog
http://henry0henry.blogspot.com/
susn04 评论于2009-5-31 10:57:20
原帖由 henry0henry 于 2009-5-19 09:08 PM 发表


不太同意楼上的,如果程序存在内存泄漏,而且只是由于四个指针没有释放,楼上如何说是杯水车薪。我觉得释放内存没有错,但是楼主的程序似乎确实没有用ref,这样释放内存就没有什么道理了。从最后的报错来看,好像 ...


要释放内存是没有错,问题在于无论他用那四个指针申请了多少空间,比如说在某个循环里申请了100万个,但是到最后释放的时候——按照上面提供的代码,其实只是释放了四个而已,另外的99万个就泄露了——所以如果没在别的地方申请内存,上面代码的泄露并不严重,处在可以忽略的范围。从上面的代码来看楼主的错误在于没有ref就调用了unref,这相当于两次释放同一片内存,当然是会出错的
henry0henry 评论于2009-6-5 13:29:16
原帖由 susn04 于 2009-5-31 10:57 AM 发表


要释放内存是没有错,问题在于无论他用那四个指针申请了多少空间,比如说在某个循环里申请了100万个,但是到最后释放的时候——按照上面提供的代码,其实只是释放了四个而已,另外的99万个就泄露了——所以如果没 ...

明白你说的了,如果程序没有“大量的申请而没有释放内存”,就不算什么大麻烦。比如说如果如果我申请了内存,而且该内存使用周期就是程序整个生命过程,这样在不在程序结束时释放内存都没有太大关系,因为总之程序结束了,操作系统也会释放掉那些内存,是那样么?
欢迎大家光临我的blog
http://henry0henry.blogspot.com/
joe_li001 评论于2009-10-26 14:27:24
关注如何实现dof自动运行,不用键盘控制
tracyhust 评论于2009-11-28 14:54:58
在Timer里更新坐标吧
sichuanwww 评论于2009-11-28 16:19:35
用多线程。

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-2-27 08:32 PM

返回顶部