高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】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.
|