找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 19713|回复: 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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
20
发表于 2005-10-1 01:51:32 | 只看该作者
不是你编程有错就是你的设计书有错
你有reviewer吗?问问管你的leader,如果你是学生,问问你老师
自己附近的人是最好问的
19
发表于 2005-9-30 18:28:28 | 只看该作者
哎,问题依旧!!!!!!!!!!!!!
at G:\CXR14\BSF\.\Mathematics\CATCGMKernel.m\src\CATCGMemory.cpp:164
at G:\CXR14\BSF\.\Mathematics\CATCGMKernel.m\src\CATCGMemory.cpp:164

tmpId   106
tmpMessage   Allocation failed (11020288 bytes).
An allocation of 11020288 bytes failed.
Close the open documents that are useless, save your work, restart a new session
.
judge number in tmpJoin3FeatHybIntersect
+=============================================+
! An unhandled exception occurred in CATIA V5 !
+=============================================+

The error is : Topological Operator:
Treatment aborted on Invalid GetResult() method management.
Run() method must be call before GetResult() method.


-> 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_d273_h15m47_0.txt
+===============================================+
+ AN UNRECOVERABLE ERROR HAS OCCURED !!!        +
+-----------------------------------------------+
+ THE ERROR IS                                  +

+                                               +
+===============================================+
+ ABORTING                                      +
+===============================================+
Terminating ...

错误ID是106,错误信息输出来还是那样
18
发表于 2005-9-30 11:18:01 | 只看该作者
果然RUN有问题,我再看看到底是什么问题
17
发表于 2005-9-30 09:26:47 | 只看该作者
偶尔会出现类似错误,比如List范围外的访问(内存范围外访问)
你是在CATGeomotry.cpp出错,说明要处理的图形有问题的可能性很大
或许你的设计书对图形的处理考虑到的case有欠缺,或Ref或lifecycle有不完善的地方

CreateTope不是每个都要CATTry的,有些在Create的时候就要对参数进行图形处理后才设到member的才要,基本都只要圈run就可以,需要圈Create的会在help里写明的

GetResult一般只是把Run后设在member的point给return _pResult;出来而已,

你在系统参数里加这么一条  Disable_TieChain   -> YES
看看你的程序会不会down得更早,
16
发表于 2005-9-29 21:08:14 | 只看该作者
还有两行错误信息我忘记发了。
at G:\CXR14\BSF\.\Mathematics\CATCGMKernel.m\src\CATCGMemory.cpp:164
at G:\CXR14\BSF\.\Mathematics\CATCGMKernel.m\src\CATCGMemory.cpp:164
这是不是CAA自己进行内存管理的地方呢???我在帮助里都查不到相关的信息
15
发表于 2005-9-29 20:50:46 | 只看该作者
今天我把CATCreateTopIntersect这个CATTry起来了,结果还是在GetResult那里出错了。
我想在我GetResult()前,或者说在Run前,CATCreateTopIntersect并没有进行真的交运算,这样的做法会使CATCreateTopIntersect具有很高的灵活性,如果我来写CATCreateTopIntersect,我也不会在Run前就做真的交结果,只有当调用者真的需要的时候,也就是Run的时候我才会真的计算,然后分配内存,存储结果的。

acoka 兄,这个错误我不明白的地方是这样的,我物理内存还有800MB,程序竟然ALLOCATION Failed,这个错误到底应该大概可能是什么引起的呢?注意的是:这个代码已经循环了500次左右
14
发表于 2005-9-29 14:51:55 | 只看该作者
1年前是DS的开发伙伴处理leak的高峰
我曾经做过一个operator,因为type miss,内存没有释放掉,小的东西不要紧,处理实际的模型的时候,用10次就出错,说处理失败,(内存用不够了如果出现crash说明程序的错误检查不够)
你发的部分对分析你在哪里导致泄漏没有多大帮助,
GetResult出错也一般与内存无关,否则在run的时候就出错了(所以一般只有CreateOperator和Run用CATTry圈起来)
安装的时候的soucrce check xlm很松的,比如  aList[]->就不会被检查出来,
13
发表于 2005-9-27 21:58:36 | 只看该作者
建议使用逐步收缩法: 先把循环体内的内容全都注释掉,运行,应该没错误.然后一点点加入Code,希望能找出哪段Code有问题.
如果能找出来,余下的问题就好办多了.
12
发表于 2005-9-27 20:21:09 | 只看该作者
CSC(check source files...)过了,没什么效果,问题不在这里面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-24 08:36 , Processed in 0.028611 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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