![]() |
【转帖】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. |
所有的时间均为北京时间。 现在的时间是 02:17 PM. |