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