马上注册,结交更多同行朋友,交流,分享,学习。
您需要 登录 才可以下载或查看,没有帐号?注册
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次后会有这个错误呢,而且每次错误发生的循环次数不是一样的,也就是说,视我当时机器是否还运行其他程序有关,别的程序占用多少内存有关。不管怎样,为什么会一下子需要那么多内存呢,而且当错误发生时我还有那么多的内存。
各位高手,请指点,我对操作系统之类的知道的不多,满皮毛的,请指教啊,满急的!!!!! |