[Dcmlib] fuite mémoire dans gdcm

Mathieu Malaterre Mathieu.Malaterre at creatis.insa-lyon.fr
Fri Aug 29 11:37:08 CEST 2003


Salut,

	J'essaie de corriger quelques fuites mémoire dans gdcm mais j'ai un 
petit problème:

	Valgrind me rapporte ca:

==16844== 866840 bytes in 43342 blocks are definitely lost in loss 
record 8 of 10
==16844==    at 0x4002868C: __builtin_new (vg_replace_malloc.c:172)
==16844==    by 0x402BB814: gdcmHeader::NewElValueByNumber(unsigned 
short, unsigned short) (gdcmHeader.cxx:1061)
==16844==    by 0x402BC301: gdcmHeader::ReadNextElement(void) 
(gdcmHeader.cxx:1189)
==16844==    by 0x402BE9ED: gdcmHeader::ParseHeader(bool) 
(gdcmHeader.cxx:1620)


Le code correspondant est:

gdcmElValue* gdcmHeader::NewElValueByNumber(guint16 Group, guint16 Elem) {
    // Find out if the tag we encountered is in the dictionaries:
    gdcmDictEntry * NewTag = GetDictEntryByNumber(Group, Elem);
    if (!NewTag)
       NewTag = new gdcmDictEntry(Group, Elem);

    gdcmElValue* NewElVal = new gdcmElValue(NewTag);
    if (!NewElVal) {
       dbg.Verbose(1, "gdcmHeader::NewElValueByNumber",
                   "failed to allocate gdcmElValue");
       return (gdcmElValue*)0;
    }
    return NewElVal;
}

Le problème c'est qu'il n'est pas immédiat de savoir quand il faut faire un:

delete NewTag

De meme dans le destructeur de gdcmElValue, je ne sais pas comment 
savoir si je dois détruire le membre 'entry':


Est-ce qu'un developpeur pourrait m'aider ?

merci,
mathieu




More information about the Dcmlib mailing list