几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   DirectDWG (http://www.dimcax.com/hust/forumdisplay.php?f=89)
-   -   【转帖】several Memory Leaks While Traversing Oddbdata (http://www.dimcax.com/hust/showthread.php?t=18573)

yang686526 2009-05-07 03:51 PM

【转帖】several Memory Leaks While Traversing Oddbdata
 
several memory leaks while traversing oddbdatabase
several memory leaks while traversing oddbdatabase
i have got several memory leaks while traversing oddbdatabase
in the following way:
void
traverseentities()
{
oddbblockreferenceptr zeroptr;
traverseblockreference(zeroptr);
}
traverseblockreference(oddbblockreferenceptr pblockreference)
{
oddbobjectid blockid;
if (pblockreference.isnull())
blockid = m_db->getmodelspaceid();
else
blockid = pblockreference->blocktablerecord();
oddbblocktablerecordptr pblock = blockid.openobject();
oddbobjectiteratorptr pentiter = pblock->newiterator();
for (; !pentiter->done(); pentiter->step()) {
oddbentityptr ntt = pentiter->entity();
if (!ntt.isnull())
traverseentity(callback, ntt);
}
if (!pblockreference.isnull()) {
oddbobjectiteratorptr pattriter = pblockreference->attributeiterator();
for (; !pattriter->done(); pattriter->step()) {
oddbentityptr ntt = pattriter->entity();
if (!ntt.isnull())
traverseentity(callback, ntt);
}
}
}
void
traverseentity(oddbentityptr pentity)
{
if (pentity->iskindof(oddbblockreference::desc())) {
oddbblockreferenceptr pblockreference = pentity->queryx(oddbblockreference::desc());
traverseblockreference(callback, pblockreference);
return;
}
oddbdimensionptr pdimension = pentity->queryx(oddbdimension::desc());
if (!pdimension.isnull()) {
//traversedimension(pdimension);
return;
}
if (pentity->isaproxy()) {
//traverseproxy(pentity);
return;
}
entity(pentity);
}
void entity(oddbentityptr pentity)
{
oddblineptr pline = pentity->queryx(oddbline::desc());
if (!pline.isnull()) {
traverseline(pline);
return;
}
}
and so on...
may be it is an erroneous approach to traverse entities.
have any idea what is wrong?
thanks
it would be helpful if you could send us some code that we can compile (perhaps a modified version of odreadex) and test, to see if we can reproduce this problem.


所有的时间均为北京时间。 现在的时间是 07:30 PM.