[Dcmlib] c++: string

Benoit Regrain benoit.regrain at creatis.insa-lyon.fr
Tue Sep 16 17:01:04 CEST 2003


Hi,

----- Original Message ----- 
From: "Jean-Pierre Roux" <Jean-Pierre.Roux at creatis.insa-lyon.fr>
To: "Mathieu Malaterre" <Mathieu.Malaterre at creatis.insa-lyon.fr>
Cc: <creatis-hackers at creatis.insa-lyon.fr>; <dcmlib at creatis.insa-lyon.fr>
Sent: Tuesday, September 16, 2003 4:27 PM
Subject: Re: [Dcmlib] c++: string


> Quoting Mathieu Malaterre <Mathieu.Malaterre at creatis.insa-lyon.fr>:
>
> > Salut les hackers/gdcmeux,
> >
> > Je n'arrive pas à faire marcher gdcm sous win32 en mode debug.
> >
> > C'est cette instruction coupable:
> >
> > const char *res = GdcmHeader.GetPubElValByNumber(0x0008, 0x0016);
> >
> > en effet lorsque le champ n'est pas trouvé gdcm renvoi "gdcm::Unfound":
>
>
>
> Compte tenu du nombre d'occurences de
> return "gdcm::Unfound";
> ne pourrait-on pas declarer cette chaine en global (en meme temps que
gdcmDebug,
> etc) et lui affecter sa valeur dans gdcmGlobal::gdcmGlobal ?
> Ou bien est-ce une mauvaise idée?
Ca marcherait très bien,  rien ne l'empeche... et ce serait d'ailleurs pas
une mauvaise idée...


>
>
>
>
> > const char *res = GdcmHeader.GetPubElValByNumber(0x0008, 0x0016);
> >
> > string gdcmElValSet::GetElValueByNumber(guint16 group, guint16 element)
{
> >     TagKey key = gdcmDictEntry::TranslateToKey(group, element);
> >     if ( ! tagHt.count(key))
> >        return "gdcm::Unfound";
> >     return tagHt.find(key)->second->GetValue();
> > }
> >
> > Est-ce que cette fonction peut etre utilisée sainement, vu que le chaine
> > "gdcm::Unfound" est locale à la fonction GetElValueByNumber ? Pour moi
> > la string renvoyée (=objet temporaire) est détruite à la fin de
> > l'instruction et donc 'res' contient un mauvais pointeur...
Cela doit marcher, car c'est une copie de la chaine de caractere (string)
qui est retourné.
Et de plus, avant, je crois que ca marchait.
Quel genre d'erreur tu as (quel message) ? C'est à la compilation ou à
l'exécution ?
Et aussi, pourquoi tu retourne la valeur dans un char* alors que la méthode
retourne un string
(surtout qu'il n'y a pas de mémoire allouée pour ton char *... c'est encore
un pointeur au lieu d'être
une chaîne de caractères) ?
Pourquoi ne pas avoir un string pour res ?

Benoit




More information about the Dcmlib mailing list