Re: [ROOT] Need advice with TString problem? - static as solution?

From: cstrato (cstrato@aon.at)
Date: Sat Dec 20 2003 - 12:53:22 MET


Dear Rene

Thank you for your fast reply as usual.

This morning I had the idea to try:
    static TString opt = "separate";
and now everything works fine, and your answer gives me a
first explanation why I have to use static.

However, I am far away to understand this issue, I checked
a couple of C++ books and did not find any explanation :-(

As far as I understand you should usually avoid to declare
static variables in methods since they never go out of scope.
Since I have a lot of such cases I would need to declare
a lot of variables to be static.

Do you think that this problem arises since I have defined:
    static XNormationManager * sNormManager;
i.e. would this problem still exist if I simply declare:
    XNormationManager * fNormManager;

Best regards
Christian


Rene Brun wrote:
> 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