Re: [ROOT] Need advice with TString problem?

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sat Dec 20 2003 - 08:54:05 MET


Hi Christian,

It looks like you are just hitting a simple C++ scoping problem.
In case you store a pointer to the second argument of your
InitSelector function, this pointer will point to a dead area when
the original TString object will go out of scope.

Rene Brun

On Sat, 
20 
Dec 2003, cstrato wrote:

> Dear Rooters
> 
> Meanwhile, I could narrow down the error to the following
> method in my GUI class XNormationFrame:
> Int_t XNormationFrame::InitSelector()
> {
>     Int_t err = 0;
>     TString opt = "separate";
>     err = XMainFrame::sNormManager->InitSelector("rank", opt.Data());
>     return err;
> }
> In this case I get the error described earlier.
> 
> However, the following simple change DOES work:
> Int_t XNormationFrame::InitSelector()
> {
>     Int_t err = 0;
>     err = XMainFrame::sNormManager->InitSelector("rank", "separate");
>     return err;
> }
> 
> Can anybody explain me what could cause this error???
> 
> Thank you in advance
> Best regards
> Christian
> 
> 
> cstrato wrote:
> 
> > Dear Rooters
> > 
> > I have the following strange problem and do not know how
> > to find the error:
> > 
> > I have a basic library and a couple of derived libraries,
> > which define different XManager classes and subclasses.
> > Using one of the derived libraries I am able to execute
> > the following macro from within ROOT:
> > 
> > void Normalize(
> > {
> >    XNormationManager *manager = new XNormationManager("Manager");
> > 
> >    manager->Initialize("PixType");
> >    manager->InitSelector("rank", "separate", 4,0,0.3,400,0);
> > // here I initialize XSelector::fOption = "separate"
> > 
> >    manager->New("test","~/ROOT/rootcode","PixType");
> > // here I create file = new TFile(name,"CREATE", title)
> > 
> >    manager->OpenData("~/ROOT/rootdata/test.root");
> > 
> >    manager->Select("TestSet","tree1");
> > // at this point XSelector::fOption is already set to:
> > // fOption = "CREATE" instead of fOption = "separate"
> > // when this code is part of a standalone GUI app!
> > 
> >    manager->Select("TestSet","tree2");
> >    manager->Select("TestSet","tree3");
> > 
> >    manager->Normalize("TestSet");
> > 
> >    delete manager;
> > }
> > 
> > Please note that this macro has always worked witout any
> > problems and still runs perfectly fine.
> > 
> > However, now I have developed a GUI application, where
> > the user can set all parameters graphically, and where
> > this code is implemented within different  methods of
> > my class XNormationFrame. In the XMainFrame I have defined:
> >   static XNormationManager  *sNormManager;
> > and the subframe calls e.g.
> >   XMainFrame::sNormManager->Initialize("PixType")
> > etc.
> > 
> > When I press the button to execute the same commands
> > as in my macro, then XSelector::fOption, which is
> > set to "separate" in InitSelector(), is strangley
> > set to "CREATE" after execution of manager->New()!!
> > 
> > I know that you cannot give me a concrete answer, but
> > maybe you could tell me:
> > Does this look like a buffer overflow?
> > What are the usual errors which result in such an error?
> > What can be done to track down this error?
> > 
> > Thank you in advance
> > Best regards
> > Christian
> > _._._._._._._._._._._._._._._._
> > C.h.i.s.t.i.a.n S.t.r.a.t.o.w.a
> > V.i.e.n.n.a       A.u.s.t.r.i.a
> > _._._._._._._._._._._._._._._._
> > 
> > 
> > 
> > 
> 



This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:17 MET