找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 19708|回复: 19
打印 上一主题 下一主题

CAA 的一个调试错误,请求支援

[复制链接]
跳转到指定楼层
1
发表于 2005-9-27 12:09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
我的代码较长,3000多行,算法比较复杂,不能都给出,这里给出错误和相关代码,请高手指点

+=============================================+
! An unhandled exception occurred in CATIA V5 !
+=============================================+

The error is : Allocation failed (11020288 bytes).
An allocation of 11020288 bytes failed.
Close the open documents that are useless, save your work, restart a new session
.


-> Error logged in C:\Documents and Settings\Administrator\Local Settings\Applic
ation Data\DassaultSystemes\CATTemp\error.log

-> Abend file is C:\Documents and Settings\Administrator\Local Settings\Applicat
ion Data\DassaultSystemes\CATTemp\AbendTrace_Administrator_d270_h10m45_0.txt
+===============================================+
+ AN UNRECOVERABLE ERROR HAS OCCURED !!!        +
+-----------------------------------------------+
+ THE ERROR IS                                  +

+                                               +
+===============================================+
+ ABORTING                                      +
+===============================================+

这里为什么会一下需要这么多内存呢,出错的地方已经进行了好几百次循环都没有问题,而且每次循环的内存都释放掉了,在任务管理器的情况是这样的:

物理内存中可用数 还有大概800多MB,内存使用大概有1.5GB多,我机器物理内存有2G,还有虚拟内存几个G,
为什么会有这个错误呢。

出错代码是这样的:
                                                                  
CATLISTP(CATCell) listCellsOfCurves1;
CATBody* tmpJoin3FeatResultBody1=NULL;
CATBody* tmpJoin3FeatResultBody2=NULL;
CATBody* tmpJoin3FeatResultBody3=NULL;
CATBody* tmpJoin3FeatResultBody=NULL;
for(int nbJoin=1;nbJoin<=3;nbJoin++)
{
         CATIGeometricalElement *pGeomEltOnCurFeatJoin3Feat = 0;
         rc = CATBodyListOfJoin[nbJoin]->QueryInterface(IID_CATIGeometricalElement,
                                                                                                        (void**)&pGeomEltOnCurFeatJoin3Feat);            
        CATBody_var Join3FeatResultBody = pGeomEltOnCurFeatJoin3Feat->GetBodyResult();
        CATBody* tmpJoin3FeatpCATBody=0;
        rc=Join3FeatResultBody->QueryInterface(IID_CATBody,(void**)&tmpJoin3FeatpCATBody);
        CATHybIntersect* tmpJoin3FeatHybIntersect=::CATCreateTopIntersect(tmpFactory,itmpData,piTetra,tmpJoin3FeatpCATBody);
       if(tmpJoin3FeatHybIntersect!=NULL)
      {
                                                                                tmpJoin3FeatHybIntersect->Run();
                                                                                std::cout<<"judge number in tmpJoin3FeatHybIntersect  "<<std::endl;
                                                                                tmpJoin3FeatResultBody= tmpJoin3FeatHybIntersect->GetResult( );
                                                                                if(tmpJoin3FeatResultBody!=NULL)  
                                                                                {
                                                                                    if(nbJoin==1)
                                                                                 tmpJoin3FeatResultBody1=tmpJoin3FeatResultBody;
                                                                                if(nbJoin==2)
                                                                                tmpJoin3FeatResultBody2=tmpJoin3FeatResultBody;
                                                                                if(nbJoin==3)
                                                                                tmpJoin3FeatResultBody3=tmpJoin3FeatResultBody;
                                                                                long nbDomain = tmpJoin3FeatResultBody->GetNbDomains();
                                                                                std::cout<<"nbDomain  "<<nbDomain<<std::endl;
                                                                                for(int domainnumber1=1;domainnumber1<=nbDomain;domainnumber1++)
                                                                                {
                     }

后面的代码我就不贴了,主要就是对数据的处理了。

错误是在这里发生的:tmpJoin3FeatResultBody= tmpJoin3FeatHybIntersect->GetResult( );

这段代码外面还有循环,大概要循环5000次吧,每次循环内存都释放的,只有个double被我记录下来。为什么循环大概500次后会有这个错误呢,而且每次错误发生的循环次数不是一样的,也就是说,视我当时机器是否还运行其他程序有关,别的程序占用多少内存有关。不管怎样,为什么会一下子需要那么多内存呢,而且当错误发生时我还有那么多的内存。

各位高手,请指点,我对操作系统之类的知道的不多,满皮毛的,请指教啊,满急的!!!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2005-9-27 13:08:30 | 只看该作者
11020288 bytes其实并不多,也就是10MB多
但是你的内存使用大概有1.5GB多,确实是挺惊人的,看来是在处理很大的model
具体的原因,如果不深入CATIA的内存管理,可能很难查出来
如果想确认到底是不是内存不够的问题,建议你在64位WinXP上试一下,
或者32bit的WinXP用/3G来启动打开3G模式,这样可用内存会大一些
3
发表于 2005-9-27 13:39:39 | 只看该作者
我确实搞错了这个东西,只有10M多点而已,但是为什么会有这个错误呢,我还有那么多内存呢,内存应该够用才对啊
4
发表于 2005-9-27 14:11:59 | 只看该作者
我猜想,也许CATIA需要的是一大块连续的内存(大于1.5GB)
而你虽然还有800MB(真的吗?1.5G+800M>2G),可能都是一些零碎的空间?
所以想让你试试更大内存的情况下是否还发生。
5
发表于 2005-9-27 15:29:01 | 只看该作者
>CATHybIntersect* tmpJoin3FeatHybIntersect=::CATCreateTopIntersect(tmpFactory,itmpData,piTetra,tmpJoin3FeatpCATBody);
在GetResult之后用delete将其删除.
一般情况下,用CAA编程,有点memory leak 问题不大, 但你有5000个循环,就不得不小心了.比如 pGeomEltOnCurFeatJoin3Feat 用完之后不知道是不是删掉了,建议用CATIGeometricalElement_var.
6
发表于 2005-9-27 15:53:20 | 只看该作者
xyzhu说得没错,
还有一个,计算完成后不用的tmpBody也要用CATICGMContainer::Remove()释放
你说你每次循环内存都释放的,建议检查一下这些是否都做到了。
用CSC(check source files...)查一下你的代码(估计你已经作了)看看有没有漏掉的。
7
发表于 2005-9-27 15:59:08 | 只看该作者
顶呀
8
发表于 2005-9-27 17:02:02 | 只看该作者
tmpBody我用CATICGMContainer::Remove()删除了的,tmpJoin3FeatHybIntersect我也用delete了的,pGeomEltOnCurFeatJoin3Feat 接口所指的组件,我整个程序都要用,这里是不能够释放掉的,即使这里把它Release()了,还是有很多地方用到这个组件的,进入到这5000次循环后,每次循环后物理内存都不会少,反而增加的,也许是因为有部分内存换到了虚拟内存里面
9
发表于 2005-9-27 17:04:05 | 只看该作者
delete tmpJoin3FeatHybIntersect;                                                        tmpJoin3FeatHybIntersect=NULL;

if(tmpJoin3FeatResultBody1!=NULL)
                                                                                        tmpFactory->Remove(tmpJoin3FeatResultBody1,CATICGMContainer::RemoveDependancies );
                                                                                if(tmpJoin3FeatResultBody2!=NULL)
                                                                                        tmpFactory->Remove(tmpJoin3FeatResultBody2,CATICGMContainer::RemoveDependancies );
                                                                                if(tmpJoin3FeatResultBody3!=NULL)
                                                                                        tmpFactory->Remove(tmpJoin3FeatResultBody3,CATICGMContainer::RemoveDependancies );

这些都释放掉了的
10
发表于 2005-9-27 17:15:11 | 只看该作者
哈,我还真没用过CSC(check source files...)个呢,因为一直都没出这些问题,我刚才查了一下,问题不大,不过我先把需要注意安全的地方给安全一下,不过,我觉得效果不大,感觉中...........解决不了这个错误。等我把不安全因素改一下再来报告结果,先吃饭去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-23 21:36 , Processed in 0.025955 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表